fh-hof java: programmierung grafischer oberflächen richard göbel
Post on 05-Apr-2015
107 Views
Preview:
TRANSCRIPT
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
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
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!
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);}}
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.
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
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);
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);
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);
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);
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
FH-Hof
Übung
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.
FH-Hof
Grafische Benutzeroberflächen- Beispiel für einen ActionListener
class SpeichernListener implements ActionListener
{
public void actionPerformed(ActionEvent e) {
. . .
}
});
butSpeichern.addActionListener(
new SpeichernListener());
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
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() + "");}
}
});
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() + "");
}
});
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() + "");
}
});
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);
}
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()
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();
. . .
}
});
FH-Hof
Übung
top related