AWT Applets Swing Das AWT (Abstract Window Toolkit) • Menge von Klassen und Interfaces im Paket java.awt.* • Wird zur Erzeugung grafischer Benuterzoberflächen (Graphical User Interface, GUI) verwendet. • SWING (zu finden im paket javax.swing.* ) erweitert die Möglichkeiten des awt. Beispiel 1 import java.awt.*; AWT public class Beispiel1 extends Frame { Applets public static void main(String[] args) { Button nummer1 = new Button("Eins"); Button nummer2 = new Button("Zwei"); Swing Beispiel1 fenster = new Beispiel1(); FlowLayout meinLayout = new FlowLayout(); fenster.setLayout(meinLayout); fenster.add(nummer1); fenster.add(nummer2); fenster.pack(); fenster.show(); } } AWT Applets Swing Übungen mit der Java API • Von welchen Klassen stammt die Klasse Frame ab? • Suchen Sie die Klasse Button. Welche Möglichkeiten gibt es den Konstruktor aufzurufen? Welche Superklasse besitzt die Klasse Button? • Was bewirkt die Klasse FlowLayout? Was passiert wenn ich sie nicht aufrufe? • Woher erbt die Klasse Frame die Methode setLayout()? • Woher stammen die Methoden add(), pack() und show() und was bewirken sie? • Welche Komponenten (Components) gibt es? • Wie kann ich das Fenster wieder schließen? Aufgabe 1 AWT Applets Swing • • • • • Erstellen Sie ein Klasse Beispiel2 in der sie die folgenden Komponenten verwenden: Button Label Checkbox List TextArea Nutzen Sie dafür die Java API und verwenden Sie den LayoutManager FlowLayout. import java.awt.*; public class Beispiel2 extends Frame { public static void main(String[] args) { Button myButton = new Button("Eins"); AWT Label myLabel = new Label("Label1"); Checkbox myCheckbox = new Checkbox("Schalter"); Applets List myList = new List(3, true); myList.add("Auswahl1"); myList.add("Auswahl2"); Swing myList.add("Auswahl3"); TextArea myTextArea = new TextArea(5,30); Beispiel2 fenster = new Beispiel2(); FlowLayout meinLayout = new FlowLayout(); fenster.setLayout(meinLayout); fenster.add(myButton); fenster.add(myLabel); fenster.add(myCheckbox); fenster.add(myList); fenster.add(myTextArea); fenster.pack(); fenster.show(); } } Lösung Aufgabe 1 AWT LayoutManager Applets Swing • FlowLayout: ordnet der Reihe nach an • BorderLayout: unterteilt in: central, north, east, south, west • GridLayout: n* m Matrix • GridBagLayout Beispiel AWT import java.awt.Graphics; import java.awt.Font; Applets Swing import java.awt.Color; public class Beispiel5 extends java.applet.Applet { Font myFont = new Font("Arial", Font.BOLD, 20); public void paint(Graphics fenster) { fenster.setFont(myFont); fenster.setColor(Color.blue); fenster.drawString("Hello my World", 50, 100); } } <html> AWT Applets <head> <title>Meine neue Seite</title> </head> <body> Swing <applet code = "Beispiel5.class" width=300 height =200> </applet> </body> </html> AWT Applets Swing Übungen • Suchen sie den verwendeten Konstruktor der Klasse Font in der Java-API. Welche Bedeutung besitzen die einzelnen Parameter? • Suchen Sie die Methoden setFont(), setColor() und drawString() und analysieren Sie die Übergabeparameter. Worum handelt es sich in den einzelnen Fällen? • Ändern Sie im Beispiel die Schrift auf "Times New Roman", die Schriftgröße auf 25, den Schriftschnitt auf kursiv, die Farbe auf grau und die Fenstergröße auf 500 x 500. Positionieren Sie die Schrift bei den Koordinaten 150 (x-Achse) und 220 (y-Achse). AWT Applets Swing Übungen • Im bin-Verzeichnis des Java SDK finden Sie die Datei appletviewer.exe. Diese ermöglicht das Starten eines Applets über die Eingabeaufforderung mit dem Kommando appletviewer MeineKlasse.java • Dazu ist es allerdings notwendig das Applet-Tag in die Java Datei zu integrieren. (Zu Beginn, noch vor der eigentlichen Klassendefinition). Zusätzlich ist es notwendig die Tags auszukommentieren. • Beispiel: //<applet code = "MeineKlasse.class" width=400 height = 400></applet> • Übung: Ändern Sie das vorhergehende Beispiel dahingehend, dass es mit dem appletviewer aufgerufen werden kann. Beispiel 6 TeilA AWT Applets <html> <head> Swing <title>Meine neue Seite</title> </head> <body> <applet code = "Beispiel6.class" width=500 height =500> </applet> </body> </html> Beispiel 6 TeilB AWT import java.awt.*; Applets public class Beispiel6 extends java.applet.Applet { int breite = 10; int tiefe = 10; Swing public boolean mouseDown(Event evt, int a, int b) { breite = a; tiefe = b; Neuaufruf der Paint-Methode repaint(); return true; } public void paint (Graphics schirm) { schirm.setColor(Color.blue); schirm.drawString("Follow me", breite ,tiefe); } } Beispiel 1a (GUI mit SWING) AWT import java.awt.*; import javax.swing.JFrame; Applets Importieren einer SWING-Klasse public class Beispiel1a extends JFrame { Swing public static void main(String[] args) { Button nummer1 = new Button("Eins"); Button nummer2 = new Button("Zwei"); Beispiel1a fenster = new Beispiel1a(); FlowLayout meinLayout = new FlowLayout(); Container c = fenster.getContentPane(); c.setLayout(meinLayout); c.add(nummer1);c.add(nummer2); fenster.setBounds(350,350,250,100); fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenster.setVisible(true); } } Die Klassenhierarchie von Object bis JFrame AWT java.lang Applets Object Component Swing Container Ein Objekt das auf dem Bildschirm dargestellt wird und mit dem Benutzer "interagiert". Beispiel: Button, Checkbox, Scrollbar Komponente die andere Komponenten beinhalten kann java awt . Window Frame javax swing . JFrame Einfaches Fenster ohne Titelzeile oder Grenzen Fenster mit Titelzeile und Grenzen Fenster mit erweiterten Möglichkeiten Applets mit javax.swing AWT Applets import javax.swing.*; Swing import java.awt.*; public class HelloApplet_b extends JApplet{ public void init() { Container cp = getContentPane(); cp.add(new JLabel("Mein erstes Applet!")); } } AWT Applets Swing Unterschied AWT und SWING AWT und SWING decken nicht die selben Bereiche ab. Überschneidungen gibt es vor allem bei den Fenstern und Standardsteuerelementen (Schalter, Listenfelder). SWING erzeugt "lightweight"-Komponenten die betriebssystemunspezifisch sind, wohingegen AWT "heavyweight"-Komponenten erstellt, die je nach Betriebssystem anders aussehen. Bei SWING handelt es sich um die neuere Technologie. AWT unter Windows SWING AWT Applets Swing Vorteile von SWING • SWING ist moderner: die Verwendung wird von SUN empfohlen. Die Steuerelemente sind vollständig in Java realisiert und die Bibliothek ist umfangreicher. • SWING ist umfangreicher: SWING bietet eine umfangreichere Funktionalität die in Zukunft vermutlich noch erweitert werden wird. • SWING ist strukturierter: SWING verfügt über eine einheitlichere Namensgebung als das AWT. • SWING besitzt ein einheitliches Design: ein JavaProgramm soll auf jeder Plattform gleich aussehen (Metal-Look). AWT Beispiel Teil1 Applets Swing //<applet code=Schalter.class width=250 height=100> </applet> import javax.swing.*; import java.awt.*; import java.awt.event.*; AWT Beispiel Teil2 Applets Swing public class Schalter extends JApplet implements ActionListener { JLabel meinLabel = new JLabel("Label hier"); JButton buttonOK = new JButton("OK"); JButton buttonCancel = new JButton("Cancel"); Beispiel Teil3 AWT Applets public void init() { Container c = getContentPane(); Swing c.setLayout(new FlowLayout()); buttonOK.setActionCommand("on_command"); buttonOK.addActionListener(this); buttonCancel.setActionCommand("cancel_command"); buttonCancel.addActionListener(this); c.add(meinLabel); c.add(buttonOK); c.add(buttonCancel); } Beispiel Teil4 AWT Applets public void actionPerformed(ActionEvent e) { Swing if(e.getActionCommand().equals("cancel_command")) { meinLabel.setText("Cancel gedrückt!"); } else { meinLabel.setText("OK gedrückt!"); } } } Übungen AWT Applets Swing • Suchen Sie in der Java API alle im Beispiel verwendeten Klassen aus den Paketen javax.swing, java.awt und java.awt.event. • Suchen Sie ebenso die verwendeten Konstruktoren der Klassen JLabel und JButton. • Was bewirkt die Methode getContentPane()? • Was bewirkt die Methode setLayout() und welche Übergabeparameter erwartet sie? • Was bewirkt die Methode setActionCommand() ? • Was bewirkt die Methode setActionListener()? • Woher kommt die Methode actionPerformed()? Muss sie implementiert werden? Welche Übergabeparameter erwartet sie? • Was bewirkt die Methode setText() und woher kommt sie? //<applet code=Schalter2.class width=250 height=100></applet> import javax.swing.*; AWT import java.awt.*; Applets public class Schalter2 extends JApplet implements MouseListener { Verwendung des Interface MouseListener import java.awt.event.*; JLabel label = new JLabel("Label hier"); JButton buttonOK = new JButton("OK"); Swing public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout()); buttonOK.addMouseListener(this); c.add(label); c.add(buttonOK); } public void mouseClicked(MouseEvent e) { if (e.getButton()== MouseEvent.BUTTON1) { label.setText("Links"); } else { label.setText("Rechts"); } } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} } Übungen AWT Applets Swing • Müssen die Methoden mousePressed(), mouseReleased(), mouseEntered() und mouseExited() deklariert werden? • Erklären Sie die Bedeutung der rot eingerahmten Felder. Aufgaben AWT Applets Swing Schreiben Sie ein Applet, welches ein Label und eine Schaltfläche aufweist. Im Label steht zu Beginn die Zahl 2 und bei jedem Drücken der Schaltfläche soll die Zahl verdoppelt werden (2,4,8,16...). Ändern Sie das Applet dann dahingehend, dass Sie selbst einen Wert eingeben können. (Anmerkung: verwenden Sie das Feld JTextField).