Java für Computerlinguisten - Institut für Maschinelle

Werbung
Java für Computerlinguisten
5. Grafische Userinterfaces
Christian Scheible
Institut für Maschinelle Sprachverarbeitung
31. Juli 2009
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
1 / 33
Übersicht
1
Besprechung der Übungen vom Donnerstag
2
GUI-Programmierung
3
Sonstiges
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
2 / 33
GUI
Übersicht
• Grafische Userinterfaces
• Wir stellen dem User Fenster mit Bedienelementen zur Verfügung
• Buttons
• Texteingaben
• Listen
• Dialoge (z.B. Speichern als ...)
• In Java in mehreren Paketen
• Swing
• Abstract Window Toolkit
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
3 / 33
GUI
AWT
• java.awt
• Benutzt GUI-Komponenten des jeweiligen Betriebssystems
• Aussehen und Benutzung wie in diesem System
• Implementierung für jedes System neu, Portierung könnte Probleme
machen
Swing
• javax.swing
• Nachfolger von AWT
• Definiert eigene GUI-Komponenten
• Sieht etwas eigen aus, Benutzung nicht unbedingt wie im
Betriebssystemen
• Einfach portierbar
Üblich: Swing für Oberfläche, AWT für Logik
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
4 / 33
Swing
Model-View-Controller
• Model: Daten/Logik, die repräsentiert werden sollen
• View: Darstellung der Daten im Programm
• Controller: Verarbeitung von Benutzereingaben
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
5 / 33
Swing
Mein Program
Mein Program
Frame
File Edit View
File Edit View
Content Pane
Fensterinhalt
Fensterinhalt
• Fenster hat mehrere Schichten
• Fenster = Frame (JFrame)
• ContentPane
→ frame.getContentPane()
• Später: Mehr Schichten
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
6 / 33
Swing
• Fenster (JFrame)
• Text in einem Label (JLabel)
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
7 / 33
Swing
Label
• Kann Text und Grafiken darstellen
• Kann durchsichtig sein (setOpaque(true))
JLabel myLabel = new JLabel("Hallo!");
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
8 / 33
Swing
class MeinProgramm {
public static void main (String[] args) {
JFrame frame = new JFrame("Mein Programm");
// Programm endet, wenn das Fenster geschlossen wird
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Label in Content Pane einfgen
frame.getContentPane().add(new JLabel("Hallo!"));
// Frame aufbauen
frame.pack();
// Frame anzeigen
frame.setVisible(true);
}
}
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
9 / 33
Swing
JButton
• Darauf kann man klicken
• Tut etwas, wenn man klickt
JButton button = new JButton("Hier Klicken");
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
10 / 33
Swing
JButton
JFrame frame = new JFrame("Mein Programm");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton meinButton = new JButton("Hier klicken!");
frame.getContentPane().add(meinButton);
frame.pack();
frame.setVisible(true);
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
11 / 33
Swing
Panel
• Bis jetzt: Immer nur eine Komponente im Frame
• Problem: Alle Komponenten füllen das ganze Fenster aus
→ Überlagerung bei mehreren Komponenten
• Schichtenmodell: Neue Schicht zur Anordnung der Komponenten
• JPanel
→ Üblich: Unterklasse von JPanel erstellen
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
12 / 33
Swing
JPanel
• Ordnet seine Elemente automatisch an
• Wird in den JFrame gesteckt
• Im Beispiel: JButton und JLabel werden dem Panel hinzugefügt
class MeinPanel extends JPanel {
JLabel meinLabel = new JLabel("Noch nichts passiert");
this.add(meinLabel);
JButton meinButton = new JButton("Mein Button");
this.add(meinButton);
}
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
13 / 33
Swing
MeinPanel.java
class MeinPanel extends JPanel {
JLabel meinLabel = new JLabel("Noch nichts passiert");
this.add(meinLabel);
JButton meinButton = new JButton("Mein Button");
this.add(meinButton);
}
MeinHauptprogramm.java
public class LabelButton {
public static void main(String[] args) {
JFrame frame = new JFrame("Beispiel: Panels");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MeinPanel());
frame.pack();
frame.setVisible(true);
}
}
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
14 / 33
Swing
Was macht der Button?
• Im Moment: nichts.
• Button muss sagen, wie die Aktion heißt, die er ausführt (frei
definierbar als String)
→ meinButton.setActionCommand("klick");
• Button braucht einen java.awt.event.ActionListener, dem er
die Aktion mitteilen kann
→ meinButton.addActionListener(this);
→ this, weil üblicherweise das Panel zum ActionListener gemacht
wird (per Interface)
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
15 / 33
Swing
MeinPanel.java
public class MeinPanel extends JPanel implements ActionListener {
JLabel meinLabel;
MeinPanel() {
meinLabel = new JLabel("Noch nichts passiert.");
this.add(meinLabel);
JButton meinButton = new JButton("Der Button");
meinButton.setActionCommand("klick");
meinButton.addActionListener(this);
this.add(meinButton);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("klick"))
meinLabel.setText("Der Button wurde gedrckt!");
}
}
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
16 / 33
Swing
JTextField
• User kann Text eingeben (eine Zeile)
• Zugriff auf den Inhalt per textEingabe.getText()
• Tastatureingaben können abgefangen werden
JTextField textEingabe = new JTextField("Hier kann ich etwas eingeben");
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
17 / 33
Swing
MeinTextPanel.java
public class MeinTextPanel extends JPanel implements ActionListener {
JTextField textEingabe;
MeinTextPanel() {
textEingabe = new JTextField("Hier kann ich etwas eingeben");
this.add(textEingabe);
JButton meinButton = new JButton("Der Button");
meinButton.setActionCommand("klick");
meinButton.addActionListener(this);
this.add(meinButton);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("klick"))
JOptionPane.showMessageDialog(new JFrame(), textEingabe.getText());
}
}
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
18 / 33
Swing
JOptionPane.showMessageDialog(new JFrame(), textEingabe.getText());
Dialog
• Gibt eine Meldung aus
• new JFrame(): Normalerweise der Frame, aus dem wir die Methode
aufrufen (geht hier nicht)
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
19 / 33
Swing
JTextArea
• Wie JTextField, kann aber mehrere Zeilen darstellen
• Ähnlich wie die Texteingabe in einem Editor
JTextArea textEingabe = new JTextArea(20,40); // 20 Zeilen, 40 Spalten
textEingabe.setText("Das Textfeld hat mehrere\nZeilen,
in die ich\nschreiben kann.");
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
20 / 33
Swing
JList
• Listen mit beliebigen Elementen
• Listenmodelle, um den Inhalt zu bearbeiten
String[] elemente = { "Item 1", "Item 2", "Item 3", "Item 4"};
JList liste = new JList(elemente);
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
21 / 33
Swing
Menüs
• Mehrere Komponenten
• JMenu: Das Menü
• JMenuBar: Die eigentliche Leiste im Menü
• JMenuItem: Ein Element im Menü (funktioniert wie ein Button)
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
22 / 33
Swing
JFrame frame = new JFrame();
// Komponenten erstellen
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Datei");
JMenuItem menuItem = new JMenuItem("Speichern unter ...");
// Komponenten ineinander einfgen
menu.add(menuItem);
menuBar.add(menu);
frame.setJMenuBar(menuBar);
frame.pack();
frame.setVisible(true);
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
23 / 33
Swing
Was es sonst noch in Swing gibt:
• Checkboxen
• Radiobuttons
• Tabellen
• Scrollbalken
• Tabs
• Fortschrittsbalken
• Vorgefertigte Dialoge (z.B. Datei öffnen)
• HTML-Anzeige
• Bessere Anordnung von Elementen (z.B. Grid-Layout, Box-Layout)
• ...
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
24 / 33
Obfuscated Java
h.java
/* Just Java
Peter van der Linden
April 1, 1996.
\u0050\u0076\u0064\u004c\u0020\u0031\u0020\u0041\u0070\u0072\u0039\u0036
\u002a\u002f\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0068\u0020\u007b
\u0020\u0020\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0020\u0076\u006f\u0069\u0064
\u006d\u0061\u0069\u006e\u0028\u0020\u0053\u0074\u0072\u0069\u006e\u0067
\u005b\u005d\u0061\u0029\u0020\u007b\u0053\u0079\u0073\u0074\u0065\u006d
\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e
\u0028\u0022\u0048\u0069\u0021\u0022\u0029\u003b\u007d\u007d\u002f\u002a
*/
Hi!
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
25 / 33
Obfuscated Java
class Sig{public static void main(String...args){\u0066or(int
\u0020$:"vÌÈÊ\"¤!ÀÊ"¬Æ\"v¤Î¤\""¤¨¸¬Æ".to\u0043h\u0061rArray()
)System./*goto/*$/%\u0126//^\u002A\u002Fout.print((char)(($>>
+(~'"'&'#'))+('<'>>('\\'/'.')/\u002Array.const(~1)\*\u002F)));}}
Just another Java Hacker
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
26 / 33
Was haben wir nicht gemacht?
Threads
• System kann mehrere Programme gleichzeitig ausführen
• Idee: Wir teilen unser Programm
• Mehrere trennbare Abläufe werden parallel erledigt
• Nutzung von mehreren Prozessoren gleichzeitig ist möglich
• Kann auch bei nur einem Prozessor schon Vorteile haben
• In Java mitgeliefert (Thread)
• Vorsicht: Programm schwieriger zu überblicken, logische Probleme
Verteilte Programmierung
• Remote Method Invocation
• Rechnen auf mehr als einem Computer
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
27 / 33
Was haben wir nicht gemacht?
JavaBeans
• Standardisierung von Objekten
• Ähnlich wie UIMA-Deskriptoren, nur nicht nur für NLP
NetBeans
• Entwicklungsumgebung von Sun
• Editor für Swing
Grafikprogrammierung
• 2D-Zeichnen
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
28 / 33
Was haben wir nicht gemacht?
Andere Verteilungsformen
• Applikation: User benutzt ein Programm auf seinem Rechner
• Applet: Programm läuft auf einer Webseite im Browser
• Web Start: Programm wird automatisch aus dem Internet geladen
und ausgeführt
Verbindungen zu anderen Sprachen
• Python (Jython)
• Ruby (JRuby)
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
29 / 33
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
30 / 33
Was haben wir nicht gemacht?
Viel Üben!
• Der einzige Weg, eine Sprache zu beherrschen.
JAVA
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
31 / 33
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
32 / 33
Literatur
Sun.
JDK 6 Documentation.
http://java.sun.com/javase/6/docs/.
Sun.
The Java Tutorials.
http://java.sun.com/docs/books/tutorial/.
C. Ullenboom.
Java ist auch eine Insel.
Galileo Press, 2003.
http://openbook.galileocomputing.de/javainsel8/.
Christian Scheible
Java für Computerlinguisten
31. Juli 2009
33 / 33
Herunterladen