AWT und JFC Abstract Windowing Toolkit - Bibliothek von JDK (sog. Package..) - Seit JDK 1.0 einige...

Preview:

Citation preview

AWT und JFC

• Abstract Windowing Toolkit - Bibliothek von JDK (sog. Package..)

- Seit JDK 1.0

einige Nachteile.....

• JavaTM Foundation Classes -Sammlung graphischer Dialogelemente

Swing

• Erweiterung von AWT• Eigenschaften - GUI-Elemente werden selbst erzeugt Im JDK1.1 eingeführt

Leichtgewichtige Komponenten und Schwergewichtige Komponenten im AWT

z.B: Swing-Button unter Windows ....

- Debug-Graphik - Look-and-Feel

Auswahlmöglichkeiten Umschaltung von Anwendung zur Laufzeit

Das Model-View-Controller-Prinzip

Der Code wird nicht mehr in einer Klasse gepackt sondern…

- ModelVerarbeitungslogik der Komponenten

- ViewDarstellung

- ControllerEvents

Vergleich von AWT und Swing

Swing-Komponenten haben einige neue Features zur Verfügung

Swing-Komponenten sind alle in JAVA implementiert

Swing Komponente verfügen über ein einheitliches dynamisches Look and Feel standardisiert

Swing hat doppelt so viele Komponenten wie das AWT komfortableres Programmieren, viele sog. „widgets“ wie z.B. Standarddialoge

Vorteile von Swing:

Vergleich von AWT und Swing

• Wichtige Merkmale:• zu jeder AWT-Komponente des AWT gibt es

entsprechende Swing-Komponenten, diese beginnen mit J- z.B. JButton statt Button

• zusätzlich ein neues Set an Komponenten• Swing-Komponenten sind alle Subklassen der

Klasse JComponent• alle Elemente von Swing sind Bestandteil des

Paketes javax.swing• Vererbungsunterschiede zwischen AWT und

Swing (siehe Diagramm)

Vergleich von AWT und Swing

• Gliederung der Swing-Elemente in:

• Kontrollelemente/Komponenten

• Container

• LayoutManager

• Events

Vergleich von AWT und Swing

AWT

Vergleich von AWT und Swing

Swing

Swing-Container dienen als Behältnis für Komponenten

Anordnung der Komponenten in einem rechteckigen Bereich

Beispiele für Container:

JFrame

JWindow

JPanel

JDialog

„normale“ Fenster mit Rahmen & Titel

Fenster ohne Rahmen & Titel (z.B. Popup-Menu)

„Ausschnitt“ eines Fensters können beliebig ineinander verschachtelt werden

Fenster, das zu einem „Oberfenster“ gehört

Hinzufügen von Komponenten mit Hilfe der Methode

void add(JComponent comp)

wird von jedem Container implementiert

Beispiel:

JButton okButton = new Button(“OK“);JPanel panel = new JPanel();

panel.add(okButton);

Frage: Wie werden die Komponenten in dem Container angeordnet? ?

Zuordnung von Layout-Managern mit der Methode

void setLayout(LayoutManager manager);

wird ebenfalls von jedem Container implementiert

Aufruf mit dem Argument null „Standard“-Layout-Manager

Komponenten müssen „von Hand“ mit der Methode

void setBounds(int x, int y, int w, int h);

skaliert und angeordnet werden

Vorteil: Volle Kontrolle Nachteil: Keine Automatisierung

FlowLayout BorderLayout GridLayout

Anordnung wie Wörter in einem Text

Ausrichtung einstellbar hier: zentriert

Anordnung am Rahmen nach Himmelsrichtungen(NORTH, SOUTH, EAST, WEST) und im Zentrum (CENTER)

Anordnung in einem regelmäßigen Gitter

hier: 2 x 3 - Gitter

In die Container kommen die verschieden Komponenten

diese werden von der Java-Swing Bibliothek angeboten

Meist werden aber auch noch einige Klassen von AWT benötigt

Menüleiste (MenuBar)ButtonsTextfelder ListenfensterGrafikenusw.

Menüleiste

Buttons

Listenfenster

Combo Boxen

Textfelder

• durch z.B. zusätzliche Tool Tips • diese kennt man aus der gesamten Windows

Welt wenn man länger mit der Maus an einer Stelle verweilt

• Beispiel:

Es gibt zwei Arten Java-Programme

application applet

• Klasse mit main-Methode • HTML-Datei• Initialisierung mit init();• Ausführen mit start();AnalyseProgramm

AnalyseKomponenteextends JFrame

import javax.swing.UIManager;

import java.awt.*;

public class AnalyseProgramm

{

// Konstruktor

public AnalyseProgramm() {

AnalyseKomponente frame = new AnalyseKomponente();

frame.setVisible(true);

}

//Center the window

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = frame.getSize();

if (frameSize.height > screenSize.height) {

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);

Kleingedrucktes:

passt das Fenster an.

Fenster wird ‚sichtbar‘ gesetzt

Die Klasse AnalyseProgramm:

TEIL 1

//Main method

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeel

ClassName());

}

catch(Exception e) {

e.printStackTrace();

}

new AnalyseProgramm();

}

}

Die Klasse AnalyseProgramm:

TEIL 2

main-Methode

Erzeugung des Fensters

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class AnalyseKomponente extends JFrame {// Komponenten werden angelegt...// Rahmen wird konstruiert...// Komponenten werden initialisiert ...

jPanel2.add(jTabbedPane1, BorderLayout.CENTER); jTabbedPane1.add(jPanel4, "Graphenschreiber"); jTabbedPane1.add(jPanel5, "Karnaugh-Diagramm"); jTabbedPane1.add(jPanel6, "Wertetabelle"); jTabbedPane1.setSelectedComponent(jPanel4);

...}

Die Klasse AnalyseKomponente

Wie werden die Fenster-Elemente positioniert?

content pane

cont

ent p

ane

Bor

derL

ayou

t

SOUTH

CENTER

cont

ent p

ane

Bor

derL

ayou

t

SOUTH

CENTERCENTER

SOUTH

cont

ent p

ane

Bor

derL

ayou

t

jPanel2.add(jTabbedPane1, BorderLayout.CENTER);

jTabbedPane1.add(jPanel4, "Graphenschreiber");

jTabbedPane1.add(jPanel5, "Karnaugh-Diagramm");

jTabbedPane1.add(jPanel6, "Wertetabelle");

jTabbedPane1.setSelectedComponent(jPanel4);

Ein umfassenderes Beispiel ?

Recommended