Model-View-Controller
AWT
Swing
Beispiel
Software-Ergonomie: Wie werden die Oberflächen sinnvoll gestaltet, damit man gut arbeiten kann, bezüglich der Aufgaben, der Gestaltung und der Dialogabläufe.
Pattern / Muster zur systematischen Entwicklung von Benutzeroberflächen.
Modell: Anwendungsprogramm, enthält die eigentliche Anwendungslogik.
View: Sicht auf das Modell, die der Benutzerin in der Oberfläche angezeigt wird.
Controller: Aktivitäten, die durch Benutzer Ereignisse (Maus, Taste, Button) ausgelöst werden und den Zustand des Modells ändern.
In Java meist nur Observer-Pattern verwendet.
Observer-Pattern: eine Beobachtungskomponente betrachtet eine Anwendung und erhält bei Änderungen der Anwendungen diese mitgeteilt wenn er sich bei der Anwendung registriert hat.
View ist dabei Observer des Modells; die Controls sind Observer der Views und beeinflussen das Modell,
Abstract Windwing Toolkit (AWT)
seit JDK 1.0 dabei
benutzt grafische Objekte des jeweiligen Betriebs- oder Fenstersystems
AWT und Swing zusammen bilden die Java Foundation Classes (JFC)
ab JDK 1.2, modernere Architektur
Swing verwendet eigene grafische Objekte, d.h. Swing Anwendungen können auf allen Betreibs- bzw. Fenstersystemen gleich aussehen.
auswechselbares Look and Feel, sogenannte Themes
viele Hilfen für Behinderte: Accessibility API
Tooltips, Tastenkürzel, Tastensteuerung, Touchpanel, etc.
in Anlehnung an die Netscape Internet Foundation Classes entwickelt
grafische Bestandteile: Widgets, Controls, Komponenten
Buttons / Knöpfe, Scrollbars / Scrollbalken, Menues, Label / Beschriftungen, Fenster, Dialogfenster
Container enthalten andere Komponenten, atomare Komponenten enthalten keine weiteren Komponenten
Top-level Container können frei im Fenstersystem erscheinen: JWindow, JFrame, JDialog, JApplet, JInternalFrame
Menues: JComponent, JMenuBar, JPopupMenu, JSeparator, AbstractButton, JMenuItem, JMenu, JCheckBoxMenuItem, JRadioButtonMenuItem
Panels: JPanel, JOptionPane, JLabel, JScrollBar, JScrollPane, JToolBar, JSplitPlane, JToolTip, JTextField, JTextArea, JEditorPane, JPasswordField, JButton, JCheckBox, JRadioButton
Layout Manager: BorderLayout, GridLayout, GridBagLayout, FlowLayout, BoxLayout, ScrollPaneLayout
Event Listener: ActionListener, KeyListener, MouseListener, WindowListener, ChangeListener
Ränder: TitledBorder, LineBorder, EtchedBorder
Erzeugen einer Komponete
JPanel knopf = new JButton("Text");
Setzen von Eigenschaften
knopf.setForeground( color );
Hinzufügen von Beobachtern / Listeners
knopf.addActionListener( klickAction );
Einstellen des Layouts bei umfassenden Panels
bereich.setLayout( new BorderLayout() );
Hinzufügen von inneren Panels oder zu umfassenden Panels
bereich.add( knopf, position );
Grösse der Komponente:
getHeight(), getWidth(),
setSize(int,int), setSize(Dimension)
getMaximumSize(), getMinimumSize(), getPreferredSize(),
setMaximumSize(Dimension), setMinimumSize(Dimension),
setPreferredSize(Dimension),
reshape(int,int,int,int)
Position der Komponente:
getX(), getY(),
setLocation(int,int)
Aussehen der Komponente:
setBackground(Color), setForeground(Color),
setFont(Font), setCursor(Cursor),
setBorder(Border)
Sichtbarkeit der Komponente:
setVisible(boolean), setOpaque(boolean),
setEnabled(boolean)
Hilfen der Komponente:
setToolTipText(String)
Inhalte von Komponenten:
add(Component), add(Component,Object),
remove(Component), removeAll(),
setLayout(LayoutManager), validate()
Fenster:
pack(), dispose(),
getOwner()
Methoden zur Zuordnung:
addWindowListener(WindowListener),
addKeyListener(KeyListener),
addActionListener(ActionListener),
addChangeListener(ChangeListener),
addMouseListener(MouseListener),
addMouseMotionListener(MouseMotionListener)
WindowEvent ==> WindowListener:
windowClosed(),
windowActivated(),
windowDeactivated(),
windowOpened(),
windowIconified(),
windowDeiconified()
KeyEvent ==> KeyListener:
keyTyped(), keyPressed(), keyReleased(),
FocusEvent ==> FocusListener:
focusGained(), focusLost(),
MouseEvent ==> MouseListener:
mousePressed(), mouseReleased(),
mouseEntered(), mouseExited(),
mouseClicked()
MouseMotionEvent ==> MouseMotionListener:
mouseMoved(), mouseDragged()
zu den meisten XXXListener Interfaces existieren XXXAdapter Klassen bei denen man nur die gewünschten Methoden überschreiben muss
Event Methoden:
getSource(),
getKeyCode(),
getSource().getActionCommand()
TSP GUI Overview
MVC-Stil:
model = new Model(); action = new ActionControl( model ); main = new MainView( model, action );
Observer-Stil:
model = new Model(); main = new MainView(model);
setzen des Controls:
component.setActionListener( new ActionControl( model ) );
setzen des Controls mit anonymer innerer Klasse:
component.setActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { model.generateProblem(); return; } );
Klassen im Detail
TSP GUI MVC
© Universität Mannheim, Rechenzentrum, 2004-2005.
Heinz KredelLast modified: Sun Jan 30 21:19:17 CET 2005