GUI programering med Java SWT
och C# .net
DVGA11
Översikt
Allmänt Laborationsmoment
GUI programmering
−
Allmänt
−
JAVA SWT/JFace ,C# .net/WinForms
IDE installation/konfiguration
−
Eclipse Java SWT/JFace
−
Visual studio C# .net
Labbar
−
Lab 1, 2 & 3
Allmänt
Vad kan förväntas?
−
Enskilda moment av labbar kommer enbart
översiktligt att tas upp under föreläsningar
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
−
Känna på att koda enkla användargränssnitt i 2
olika miljöer Java SWT/JFace och C#
.net/WinForms
GUI Programmering Allmänt
Widgets
−
−
−
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
GUI Programmering Allmänt
Widgets
Layouts
−
Positionerar widgets
på skärmen/fönstret
Events
GUI Programmering Allmänt
Widgets
Layouts
Events
−
Mus-rörelse, -klick etc.
−
Tangenttryckningar
−
Menyval
−
Knapptryckningar
−
Fokus
Historia
Windows GUI utveckling
−
Web utveckling
−
Win32 API, MFC, Visual Basic
ASP
Java – “Write once, run anywhere.”
Java GUI
Standard Native look & feel Plattformsoberoende
AWT
x
x
SWING
x
*
x
*
x
x
x
SWT/JFACE
Native hastighet
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
Java GUI
Standard Native look & feel Plattformsoberoende
AWT
x
x
SWING
x
*
x
*
x
x
x
SWT/JFACE
x
AWT
SWING (JFC – Java Foundation Classes)
−
−
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.
−
Native hastighet
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
Swing har fått många uppdateringar och blivit mycket bättre
prestandamässigt i och med SDK 1.4.2 och 1.5
SWT
Java GUI
Standard Native look & feel Plattformsoberoende
AWT
x
x
SWING
x
*
x
*
x
x
x
SWT/JFACE
AWT
SWING
SWT (Standard Widget Toolkit)
x
−
Släppt som en 3:e parts GUI toolkit Nov 2001
−
Använder både native (när det finns) och emulerade komponenter
−
Bevarar hastighet och look & feel från orginal platformen
Finns till följande plattformar
Native hastighet
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
Java GUI JFace
MVC
−
−
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
−
−
SWT är inte beroende av JFace
Man kan manipulera SWT widgets
direkt utan att gå igenom JFace
http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/jface.htm
SWT
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
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.
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.
}
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.
14.
15.
16.
17.
18.
19.
}
Java vs C# .net
Hello.java
Source
Hello.cs
compile
Hello.class
execute
JVM
Byte code
compile
Source
Hello.exe
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
.NET
http://en.wikipedia.org/wiki/Image:Overview_of_the_Common_Language_Infrastructure.png
.NET
Utvecklad av Microsoft (2000)
−
−
.NET är främst utvecklat för Windows
Nuvarande version (3.5) släpptes Nov 2007
ECMA standard
Primära språk
−
http://www.microsoft.com/net/DownloadCurrent.aspx
C#, Visual Basic .NET, C++/CLI och J#
Tredjeparts språk (bland andra)
−
Ada, COBOL, LISP, Perl, Ruby ...
.net GUI Winforms
.net stöder Winforms
och Webforms
−
Winforms = standard
GUI applikationer
−
Webforms =
webbprogrammering
Alternativ till .NET, Mono
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
−
−
1
1
Easyeclipse
SWT & Jface
1. File -> New-> Java Project
−
Ge projektet ett namn -> next
2
2. Klicka på fliken Library -> add library
−
Välj SWT-> next
3. Bocka i “include support for JFace
library” -> finish -> finish
3
http://www.easyeclipse.org/site/distributions/desktop-java.html
Eclipse 2/4
Eclipse SWT och JFace manuellt
−
SWT (enkelt)
−
http://www.eclipse.org/swt/eclipse.php
JFace (något svårare)
http://wiki.eclipse.org/JFace#Setting_Up_an_Eclip
se_Project_to_use_SWT_and_JFace
Eclipse 3/4
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
För detaljerad information om SWT se
−
http://www.eclipse.org/swt/
Eclipse 4/4
använda SWT
För att kunna exportera sitt projekt till en jar fil så
måste fat jar pluginen för eclipse vara installerad
−
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)
−
http://fjep.sourceforge.net/ (redan gjort i easyeclipse)
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
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
−
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
Laborationer Generellt
Labbgrupper skall bestå av 2 personer (undantagsvis 3)
−
Välj själv era labbpartners
Alla labbar skall följa standard
−
Ändringar av labbgrupper under kursens gång skall undvikas
Deadline är alltid kl 17.00
http://www.it.kau.se/cs/students/lab_info/labmall.php
Viktigt att inte glömma
•
Skicka alla rapporter till:
•
[email protected]
•
Lämna in ett labbomslag
−
Dokumentera källkoden
−
Man skall lätt kunna se
vad alla klasser/metoder gör/är
Skicka med
klassdiagram
Källkod
Ev. körbar fil (.jar fil)
Laborationer Generellt
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
−
Deadlines kommer att vara uppsatta på hemsidan
En retur får med automatik 1 veckas deadline ifrån
att den är färdigrättad.
De guidelines och riktlinjer för GUI som tagits
upp under kursen skall användas
Lab 1 (Deadline se schema)
Luffarschack (Tic-Tac-Toe)
Uppgift: Skriv ett luffarschack spel som går att
spela (ingen AI) 3x3 rutor.
−
Krav (grundläggande)
−
−
Språk : Java SWT
Programmet skall kunna köras utan eclipse med
kommandot java -jar programnamn.jar
Programmet skall använda SWT (ev. JFace)
Frivillig Extra uppgift
−
Lösningen skall vara implementerad med MVC
mönstret
Lab 2 (Deadline se schema)
Luffarschack (Tic-Tac-Toe)
Uppgift: Skriv ett luffarschack spel som går att
spela (ingen AI).
−
Krav (grundläggande)
−
−
Språk : C# .net (Winforms)
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
Lab 3 (Deadline se schema)
MP3Spelare
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)
Länkar 1/2
COMP455
−
Labbmall
−
http://www.harding.edu/fmccown/classes/comp445-f07/
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
−
http://www.tomlauren.com/weblog/archives/000022.html
Länkar 2/2
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