Översikt GUI programering med Java SWT och C# .net Allmänt Laborationsmoment GUI programmering DVGA11 − Allmänt − JAVA SWT/JFace ,C# .net/WinForms IDE installation/konfiguration − Eclipse Java SWT/JFace − Visual studio C# .net Labbar − Allmänt GUI Programmering Allmänt Vad kan förväntas? − − Kräver mycket egen informationsökning Huvudsakliga informationskällan är Internet − − Tips på länkar kommer att ges Inspiration ok, kopiering förbjudet − Målet − Widgets − Enskilda moment av labbar kommer enbart översiktligt att tas upp under föreläsningar Känna på att koda enkla användargränssnitt i 2 olika miljöer Java SWT/JFace och C# .net/WinForms Lab 1, 2 & 3 Objekt, knappar, fönster, textfält m.m. Påverkas av användaren via mus och tangentbordet (vanligtvis) Kan ”skapa” events (händelser) Layout Events 1 GUI Programmering Allmänt GUI Programmering Allmänt Widgets Widgets Layouts Layouts Events − Positionerar widgets på skärmen/fönstret Events − Mus-rörelse, -klick etc. − Tangenttryckningar − Menyval − Knapptryckningar − Fokus Historia AWT SWING Win32 API, MFC, Visual Basic Web utveckling − Standard Native look & feel Plattformsoberoende Windows GUI utveckling − Java GUI SWT/JFACE ASP Java – “Write once, run anywhere.” Native hastighet x x x * x * x x x x AWT (Abstract Windowing Toolkit) − Släpptes 1995 som del av JDK 1.0 − Skall man skriva ett portabelt program så måste man veta vilka komponenter som finns på de olika plattformarna och enbart använde dem som finns på alla plattformar I stort sett omöjligt … SWING SWT 2 Java GUI Java GUI Standard Native look & feel Plattformsoberoende − x AWT x x * x * SWING x * x * x x x SWT/JFACE x x x Släpptes 1998 som del av JDK 1.1 Använder en väldesignad MVC arkitektur och ritar upp alla widgets utan att använda underliggande operativsystemskomponenter. − AWT SWING SWT (Standard Widget Toolkit) Swing har fått många uppdateringar och blivit mycket bättre prestandamässigt i och med SDK 1.4.2 och 1.5 − Tillhandahåller Viewer klasser för att abstrahera bort bla uppdateringar av widgets Tillhandahåller Actions för vad som skall hända när en användare tex. trycker på en knapp Tillhandahåller standardiserade dialogrutor och wizards JFace är beroende av SWT − − Använder både native (när det finns) och emulerade komponenter − Finns till följande plattformar Bevarar hastighet och look & feel från orginal platformen Microsoft Windows, Linux, HPUX, Mac OS: Carbon QNX Photon Pocket PC Swing! MVC och andra högre abstraktionsnivåer stöds genom tillägget JFace SWT MVC − Släppt som en 3:e parts GUI toolkit Nov 2001 − x − Eftersom inga native widgets används så är swing portabelt men native look & feel är svårt att åstadkomma. Hastigheten kan också vara ett problem då alla widgets måste emuleras SWT Java GUI JFace Native hastighet x x AWT SWING (JFC – Java Foundation Classes) − Standard Native look & feel Plattformsoberoende x SWING SWT/JFACE Native hastighet AWT SWT är inte beroende av JFace Man kan manipulera SWT widgets direkt utan att gå igenom JFace Java SWT att tänka på 1) Alla SWT program har en Display som är koppling mot det underliggande grafik systemet 2) Ett Shell (skal) är ett sammansatt objekt (composite) som innehåller andra objekt 3) Alla shell måste ha en layout För att kunna visa adderade objekt 4) För att visa ett shell så måste det öppnas (open) 5) Event loopen tar hand om GUI events (måste finnas) 6) Efter att shellet har kastats så skall man kasta (dispose) Displayen http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/jface.htm 3 SWT/JFace SWT JFACE 1. 1. 2. 3. import org.eclipse.swt.SWT; org.eclipse.swt.SWT; import org.eclipse.swt.layout.RowLayout; org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.*; org.eclipse.swt.widgets.*; 2. 3. 4. 4. 5. 6. 7. 8. public class Hello { public static void main(String[] args) args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout( shell.setLayout( new RowLayout()); RowLayout()); 9. 5. 6. 7. import org.eclipse.jface.window.*; org.eclipse.jface.window.*; import org.eclipse.swt.*; org.eclipse.swt.*; import org.eclipse.swt.widgets.*; org.eclipse.swt.widgets.*; public class Hello extends ApplicationWindow { public Hello() { super(null); } protected Control createContents(Composite parent) { Label label = new Label(parent, SWT.CENTER); label.setText("Hello World"); return parent; } 8. 9. Label label = new Label(shell, SWT.CENTER); label.setText("Hello World"); label.setBounds(shell.getClientArea()); label.setBounds(shell.getClientArea()); 10. 11. 12. Java vs C# .net 10. 11. 12. 13. shell.pack(); shell.open(); // Set up the event loop. while (!shell.isDisposed ()) { (!shell.isDisposed()) if (!display.readAndDispatch ()) { (!display.readAndDispatch()) // If no more entries in the event queue display.sleep(); } } display.dispose(); 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 14. 15. 16. 17. 18. 19. Source Hello.cs compile Hello.class execute JVM Byte code compile Hello.exe Source execute CLR CIL Java vs C# .net http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java http://www.harding.edu/fmccown/java1_5_csharp_comparison.html } } 24. 25. public static void main(String[] args) args) { Hello w = new Hello(); w.setBlockOnOpen(true); w.setBlockOnOpen(true); w.open(); Display.getCurrent().dispose(); Display.getCurrent().dispose(); } 13. Hello.java } .NET .NET Utvecklad av Microsoft (2000) − − .NET är främst utvecklat för Windows Nuvarande version (3.5) släpptes Nov 2007 http://www.microsoft.com/net/DownloadCurrent.aspx ECMA standard Primära språk Tredjeparts språk (bland andra) − − C#, Visual Basic .NET, C++/CLI och J# Ada, COBOL, LISP, Perl, Ruby ... http://en.wikipedia.org/wiki/Image:Overview_of_the_Common_Language_Infrastructure.png 4 Alternativ till .NET, Mono .net GUI Winforms .net stöder Winforms och Webforms − Winforms = standard GUI applikationer − Webforms = webbprogrammering Utvecklad av Novell (2001) − för att vara kompatibel med .NET och ECMA − Mono stöder Linux, Unix, FreeBSD, Mac OS X, Solaris och MS Windows Nuvarande version (2.4) släpptes Mars 2009 − Motsvarar ett mellanting mellan .net1.1 - .net2.0 − − Windows Forms 2.0 stöds fullt ut (ej Windows Presentation Foundation) http://www.mono-project.com/Main_Page Språk i dagsläget − C#, Java, Boo, Python, Visual Basic.NET, PHP … Eclipse 1/4 Eclipse 2/4 Eclipse − − 1 1 Easyeclipse SWT & Jface Ge projektet ett namn -> next 2 2. Klicka på fliken Library -> add library − Eclipse SWT och JFace manuellt − SWT (enkelt) − JFace (något svårare) 1. File -> New-> Java Project − Välj SWT-> next 3. Bocka i “include support for JFace library” -> finish -> finish http://www.eclipse.org/swt/eclipse.php http://wiki.eclipse.org/JFace#Setting_Up_an_Eclip se_Project_to_use_SWT_and_JFace 3 http://www.easyeclipse.org/site/distributions/desktop-java.html 5 Eclipse 3/4 Eclipse 4/4 använda SWT använda SWT För att kompilera och köra SWT applikationer så måste man ha installerat och lagt till swt.jar i sitt projekt. − − Endera som i exemplet med easyeclipse eller manuellt http://www.eclipse.org/swt/ http://fjep.sourceforge.net/ (redan gjort i easyeclipse) För att få det hela att fungera så måste man även bocka för att man vill använda one-jar och välja att inkludera alla externa jars som man använder (exempelvis swt.jar) − För detaljerad information om SWT se − För att kunna exportera sitt projekt till en jar fil så måste fat jar pluginen för eclipse vara installerad http://www-128.ibm.com/developerworks/java/library/j-onejar/ Skulle det ändå inte fungera så kan man pröva att placera swt-win32.dll i samma mapp som jar filen − http://fjep.sourceforge.net/fjepfaq.html Visual Studio .net Laborationer Generellt − Visual Studio .NET − Ladda ner Visual Studio − MSDNAA Bränn skivorna eller montera dem i daemon tools eller liknande Installation Installera .net om det inte redan är gjort − Labbgrupper skall bestå av 2 personer (undantagsvis 3) Ändringar av labbgrupper under kursens gång skall undvikas Deadline är alltid kl 17.00 Alla labbar skall följa standard Viktigt att inte glömma − http://www.it.kau.se/cs/students/lab_info/labmall.php • Skicka alla rapporter till: • Lämna in ett labbomslag − Dokumentera källkoden • http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fdae52-4e35-b531-508d977d32a6&DisplayLang=en Följ anvisningarna för att installera Visual studio .net välj C# Sen kan man ta en kaffe eller 3 Välj själv era labbpartners − [email protected] Man skall lätt kunna se vad alla klasser/metoder gör/är Skicka med klassdiagram Källkod Ev. körbar fil (.jar fil) 6 Lab 1 (Deadline se schema) Laborationer Generellt Luffarschack (Tic-Tac-Toe) Krav: − Godkänt på alla 3 laborationerna för att få godkänt på Laborationsmomentet som helhet − Lämna in laborationer samt ev. returer innan deadline − Uppgift: Skriv ett luffarschack spel som går att spela (ingen AI) 3x3 rutor. − De guidelines och riktlinjer för GUI som tagits upp under kursen skall användas − MP3Spelare − Språk : C# .net (Winforms) Krav (grundläggande) − Programmet skall kunna köras utanför Visual Studio (som program.exe) Programmet skall använda .net Frivillig Extra uppgift − Lösningen skall vara implementerad med MVC mönstret Lösningen skall vara implementerad med MVC mönstret Lab 3 (Deadline se schema) Luffarschack (Tic-Tac-Toe) − Programmet skall kunna köras utan eclipse med kommandot java -jar programnamn.jar Programmet skall använda SWT (ev. JFace) Frivillig Extra uppgift − Lab 2 (Deadline se schema) Uppgift: Skriv ett luffarschack spel som går att spela (ingen AI). Krav (grundläggande) − Deadlines kommer att vara uppsatta på hemsidan En retur får med automatik 1 veckas deadline ifrån att den är färdigrättad. Språk : Java SWT Uppgift: Skriv ett GUI för en MP3 spelare som kan spela valfri mp3 fil − klass för att spela upp mp3 musik kommer att tillhandahållas. − Språk : Java SWT (ev. JFace) Krav (grundläggande) − Programmet skall kunna köras utan eclipse med kommandot java -jar programnamn.jar − Programmet skall använda SWT (ev. JFace) − Lösningen skall vara implementerad med MVC mönstret − Användaren skall kunna få upp en dialog ruta där man kan välja en mp3 fil (skall kunna öppnas när som helst). − Den valda mp3 filen skall kunna spelas och stoppas och återstartas (inget krav att den skall starta ifrån samma punkt) − Spelarfönstret skall kontinuerligt uppdateras om hur långt låten har spelats och filnamnet. − GUIet skall vara robust (ex. det skall inte gå att spela eller stoppa en låt innan den är laddad) − Implementera Drag n Drop på spelaren så att man kan släppa en låt på spelaren och den skall då spela upp denna Frivillig Extra uppgift − Spelarfönstret skall ha valfri form och färg och kunna flyttas runt samt stängas − Knapparna skall vara bilder. − Flera sånger skall kunna väljas så att de lägger sig i en kö och spelas upp efter varandra (skall också fungera med drag n drop) 7 Länkar 1/2 COMP455 − http://www.harding.edu/fmccown/classes/comp445-f07/ Labbmall − Länkar 2/2 http://www.it.kau.se/cs/students/lab_info/labmall.php Java vs C# − http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java − http://www.harding.edu/fmccown/java1_5_csharp_comparison.html AWT SWT SWING JFACE − Eclipse & SWT JFace − http://www.easyeclipse.org/site/distributions/desktop-java.html − http://www.eclipse.org/swt/eclipse.php − http://www.developer.com/java/other/article.php/10936_3330861_1 − http://wiki.eclipse.org/JFace#Setting_Up_an_Eclipse_Project_to_use_SWT_and_JFace − http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/jface.htm Kodexempel Java & C# (+ annat) − http://www.java2s.com http://www.tomlauren.com/weblog/archives/000022.html 8