fh-hof java: programmierung grafischer oberflächen richard göbel

23
FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

Upload: erna-strole

Post on 05-Apr-2015

109 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Java: Programmierung grafischer Oberflächen

Richard Göbel

Page 2: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Wichtige Begriffe

Die Swing-Bibliothek in Java stellt zum Beispiel

die folgenden Windows zur Verfügung:

JFrame für ein Hauptfenster

JDialog für ein Dialogfenster.

JApplet für eine WWW-Browser-Anwendung.

Ein ContentPane eines Windows dient zur

Aufnahme von Komponenten wie Textzeilen

Anordnung mit Hilfe eines LayoutManager.

Behandlung von Ereignissen EventListener

Page 3: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Unterklasse der Klasse JFrame als Hauptfenster einer AnwendungKomponenten werden in den

ContentPane eingefügt

WEST CENTER

SOUTH

Anordnung der Komponenten mit Hilfeeines Layout Manager

Einfügen der Komponenten entsprechenddes gewählten Layouts

Grafische Benutzeroberflächen- Konzepte

JLabelJTextFiel

dJList

JButton JButton

Definition von Event Listener und Zuordnung zu Komponenten ActionHandlerActionHandler

ListSelectionListener

Page 4: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Bibliotheken in Java

Nötige „Import-Anweisungen:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

. . .

Das Abstract Window

Toolkit (AWT) ist die Basis

für alle grafischen

Anwendungen.

Swing erweitert das AWT

und enthält modernisierte

Klassen für einige AWT-

Klassen (J...)

Achtung: Swing ist in

den meisten WWW-

Browsern nicht verfügbar!

Page 5: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Erzeugung eines Windows

class MainWindow extends JFrame { JPanel contentPane;

// Hier Deklaration aller Komponenten. . .

public MainWindow() { contentPane = (JPanel) getContentPane(); // Hier Window aufbauen . . . }

public static void main(String[] args) { // Hier Objekt erzeugen und Parameter setzen // zum Beispiel: MainWindow frame = new MainWindow(); frame.setTitle("Test"); frame.setSize(new Dimension(250,300)); frame.setVisible(true);}}

Page 6: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Wahl eines geeigneten Layouts

FlowLayout Anordnung von links nach rechts und von oben nach unten.

BoxLayout Anordnung entweder horizontal oder vertikal.

BorderLayoutAnordnung in bis zu 5 Bereichen "North", "South", "East", "West" und "Center"

GridLayout, GridBagLayout Anordnung der Komponenten in einer Matrix.

CardLayoutAnordnung von Komponenten auf alternativen Darstellungsbereichen.

Page 7: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

ContentPane mit BorderLayout (hier: West, Center, South)

JPanel mit vertikalem BoxLayout

Grafische Benutzeroberflächen- Kombination von Layouts mit JPanel

JPanel mit horizontalem BoxLayout

Page 8: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Definition der Komponenten als Attribute der Klasse

class VorlesungEditor extends JFrame {

JPanel contentPane,

panBezeichnung = new JPanel(),

panStunden = new JPanel(),

panVorlesung = new JPanel(),

panButton = new JPanel();

JTextField tfBezeichnung = new JTextField(10),

tfStunden = new JTextField(2);

JLabel labBezeichnung = new JLabel("Bezeichnung: "),

labStunden = new JLabel("Stunden: ");

JButton butSpeichern = new JButton("Speichern"),

butAbbrechen = new JButton("Abbrechen");

DefaultListModel dlm = new DefaultListModel();

JList auswahl = new JList(dlm);

Page 9: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Beispiel: Bereiche mit horizontalem BoxLayout

panBezeichnung.setLayout(new BoxLayout(panBezeichnung,BoxLayout.X_AXIS));

panBezeichnung.add(Box.createRigidArea(new Dimension(5,0)));

panBezeichnung.add(labBezeichnung);panBezeichnung.add(Box.createHorizontalGlue());tfBezeichnung.setMaximumSize(new Dimension(80,15));panBezeichnung.add(tfBezeichnung);

panStunden.setLayout(new BoxLayout(panStunden,BoxLayout.X_AXIS));

panStunden.add(Box.createRigidArea(new Dimension(5,0)));

panStunden.add(labStunden);panStunden.add(Box.createHorizontalGlue());tfStunden.setMaximumSize(new Dimension(25,15));panStunden.add(tfStunden);

Page 10: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen - Beispiel: Bereiche mit verschiedenen BoxLayouts

panVorlesung.setLayout(

new BoxLayout(panVorlesung,BoxLayout.Y_AXIS));

panVorlesung.add(panBezeichnung);

panVorlesung.add(panStunden);

panButton.setLayout(

new BoxLayout(panButton,BoxLayout.X_AXIS));

panButton.add(butSpeichern);

panButton.add(Box.createHorizontalGlue());

panButton.add(butAbbrechen);

Page 11: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen - Beispiel: Bereich mit BorderLayout

contentPane = (JPanel) getContentPane();

contentPane.setLayout(new BorderLayout());

contentPane.add(auswahl, BorderLayout.WEST);

contentPane.add(panVorlesung,BorderLayout.CENTER);

contentPane.add(panButton,BorderLayout.SOUTH);

Page 12: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Größe von Komponenten

Beeinflussung der Größe von Komponenten mit

den folgenden Methoden:

setPreferredSize(Dimension d)

setMinimumSize(Dimension d)

setMaximumSize(Dimension d)

Nicht alle Layouts berücksichtigen diese Angaben

vollständig:

vollständige Berücksichtigung durch das BoxLayout

teilweise Berücksichtigung durch das BorderLayout

keine Berücksichtigung durch das GridLayout

Page 13: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Übung

Page 14: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- EventListener

Mit einem EventListener lassen sich Aktionen für

verschiedene Ereignisse zuordnen, wie zum Beispiel:

Mausklick oder Mausbewegung

Auswahl eines Elements aus einem Menü

Aktionen auf einem Window (Verschieben, Beenden)

Ein EventListener ist ein Objekt einer durch den

Anwender implementierten Klasse.

Eine Klasse für einen EventListener:

stellt Methoden zur Verarbeitung von Ereignissen zur

Verfügung und implementiert damit ein Interface.

wird als innere Klasse einer Window-Klasse definiert.

Page 15: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Beispiel für einen ActionListener

class SpeichernListener implements ActionListener

{

public void actionPerformed(ActionEvent e) {

. . .

}

});

butSpeichern.addActionListener(

new SpeichernListener());

Page 16: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Elemente der Definition eines Listener

Welches Interface wird implementiert?

ActionListener,

ListSelectionListener,

WindowListener, . . .

Welche Methoden müssen für ein Interface

implementiert werden?

ActionListener: actionPerformed(ActionEvent)

ListSelectionListener:

valueChanged(ListSelectionEvent)

WindowListener: windowOpened(WindowEvent), . . .

Adapter statt Listener mit vordefinierten Methoden

Page 17: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Definition eines anonymen ActionListener I

butSpeichern.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Vorlesung v

= (Vorlesung) auswahl.getSelectedValue();

v.setBezeichnung(tfBezeichnung.getText());

try {

v.setStunden(

Integer.parseInt(tfStunden.getText()));}

catch (NumberFormatException ex) {

tfStunden.setText(v.getStunden() + "");}

}

});

Page 18: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Definition eines anonymen ActionListener II

butAbbrechen.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

Vorlesung v

= (Vorlesung) auswahl.getSelectedValue();

tfBezeichnung.setText(v.getBezeichnung());

tfStunden.setText(v.getStunden() + "");

}

});

Page 19: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Beispiel für einen ListSelectionListener

auswahl.addListSelectionListener(

new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e)

{

Vorlesung v = (Vorlesung)

auswahl.getSelectedValue();

tfBezeichnung.setText(v.getBezeichnung());

tfStunden.setText(v.getStunden() + "");

}

});

Page 20: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Benutzeroberflächen- Beispiel für einen WindowAdapter

public static void main(String[] args) {

VorlesungEditor frame

= new VorlesungEditor();

frame.setTitle("Vorlesung Editor");

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

frame.pack();

frame.setVisible(true);

}

Page 21: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Oberflächen - JList: Allgemeines

Ein JList repräsentiert eine Auswahlliste

Eine JList enthält die auszuwählenden Elemente

in einem Objekt der Klasse ListModel

Konstruktor: JListModel(ListModel)

Wert ändern: setSelectedValue(int)

Wert abfragen: getSelectedValue()

getSelectedValues()

Listener: ListSelectionListener()

Page 22: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Grafische Oberflächen - JList: Beispiel

DefaultListModel myModel = new DefaultListModel();

myModel.addElement(new Vorlesung("DBS", 4));

myModel.addElement(new Vorlesung("Java", 4));

. . .

JList myList = new JList(myModel);

myList.addListSelectionListener(

new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {

Object[] objs = myList.getSelectedValues();

. . .

}

});

Page 23: FH-Hof Java: Programmierung grafischer Oberflächen Richard Göbel

FH-Hof

Übung