• Menge von Klassen und Interfaces im Paket java.awt.* • Wird zur

Werbung
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).
Herunterladen