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.
import java.awt.*; Beispiel 1 public class Beispiel1 extends Frame { public static void main(string[] args) { Button nummer1 = new Button("Eins"); Button nummer2 = new Button("Zwei"); Beispiel1 fenster = new Beispiel1(); FlowLayout meinlayout = new FlowLayout(); fenster.setlayout(meinlayout); fenster.add(nummer1); fenster.add(nummer2); fenster.pack(); fenster.show();
Ü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 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"); Label mylabel = new Label("Label1"); Checkbox mycheckbox = new Checkbox("Schalter"); List mylist = new List(3, true); mylist.add("auswahl1"); mylist.add("auswahl2"); 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
LayoutManager FlowLayout: ordnet der Reihe nach an BorderLayout: unterteilt in: central, north, east, south, west GridLayout: n* m Matrix GridBagLayout
import java.awt.graphics; import java.awt.font; import java.awt.color; Beispiel 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> <head> <title>meine neue Seite</title> </head> <body> <applet code = "Beispiel5.class" width=300 height =200> </applet> </body> </html>
Ü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).
Übungen Im bin-verzeichnis des Java SDK finden Sie die Datei appletviewer.exe. Diese ermöglicht das Starten eines ü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.
<html> </html> <head> </head> <body> </body> Beispiel 6 TeilA <title>meine neue Seite</title> <applet code = "Beispiel6.class" width=500 height =500> </applet>
import java.awt.*; Beispiel 6 TeilB public class Beispiel6 extends java.applet.applet { int breite = 10; int tiefe = 10; 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) import java.awt.*; import javax.swing.jframe; Importieren einer SWING-Klasse public class Beispiel1a extends JFrame { 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 java.lang Object Component Ein Objekt das auf dem Bildschirm dargestellt wird und mit dem Benutzer "interagiert". Beispiel: Button, Checkbox, Scrollbar java.awt Container Window Komponente die andere Komponenten beinhalten kann Einfaches Fenster ohne Titelzeile oder Grenzen Frame Fenster mit Titelzeile und Grenzen javax.swing JFrame Fenster mit erweiterten Möglichkeiten
mit javax.swing import javax.swing.*; import java.awt.*; public class HelloApplet_b extends JApplet{ public void init() { Container cp = getcontentpane(); cp.add(new JLabel("Mein erstes Applet!"));
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
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 Java- Programm soll auf jeder Plattform gleich aussehen (Metal-Look).
Beispiel Teil1 //<applet code=schalter.class width=250 height=100> </applet> import javax.swing.*; import java.awt.*; import java.awt.event.*;
Beispiel Teil2 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 public void init() { Container c = getcontentpane(); 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 public void actionperformed(actionevent e) { if(e.getactioncommand().equals("cancel_command")) { meinlabel.settext("cancel gedrückt!"); else { meinlabel.settext("ok gedrückt!");
Übungen 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.*; import java.awt.*; import java.awt.event.*; Verwendung des Interface MouseListener public class Schalter2 extends JApplet implements MouseListener { JLabel label = new JLabel("Label hier"); JButton buttonok = new JButton("OK"); 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 Müssen die Methoden mousepressed(), mousereleased(), mouseentered() und mouseexited() deklariert werden? Erklären Sie die Bedeutung der rot eingerahmten Felder.
Aufgaben 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).