Actions

10
04 - Act ions Actions

description

Actions. Motivation. In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden gleiche Aktionen durch verschiedene Swing-Komponenten ausgelöst. Z.B. durch MenuItems, Buttons, Textfelder, Comboboxen - PowerPoint PPT Presentation

Transcript of Actions

Page 1: Actions

04 - Actions

Actions

Page 2: Actions

04 - Actions 2

MotivationIn verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt.

Häufig werden gleiche Aktionen durch verschiedene Swing-Komponenten ausgelöst. Z.B. durch MenuItems, Buttons, Textfelder, Comboboxen

Das Erscheinungsbild dieser Komponenten ähnelt sich häufig. Es werden gleiche Beschriftungen und Icons verwendet.

Es werden gleiche ToolTip-Texte und Mnemonic und Accelerator Keys verwendet.

Die Komponente sind alle gleichzeitig zu aktivieren bzw. zu deaktivieren.Es ist zweckmäßig die Realisierung der Aktion sowie das Erscheinungsbild der Swing-Komponenten an einer Stelle zu zentralisieren. Interface Action und abstrakte Klasse AbstractAction

Page 3: Actions

04 - Actions 3

Das Interface ActionDas Interface Action ist abgeleitet vom Interface ActionListener und erbt damit die Methodepublic void actionPerformed (ActionEvent e)

Bei einer Swing-Komponente wird ein Action-Object mit der Methodepublic void setAction(Action a)registriert.

Das selbe Action-Objekt kann bei verschiedenen Komponenten registriert werden.

Mit den Methodenpublic boolean isEnabled() bzw.public void setEnabled(boolean b)des Action-Interfaces wird der Status aller Komponenten bei dem das Action-Objekt registriert ist abgefragt bzw. modifiziert.

Page 4: Actions

04 - Actions 4

Die Methodenpublic Object getValue(String key) bzw.public void putValue(String key, Object value)fragen den Wert einer Eigenschaft ab bzw. modifizieren diesen.

Folgende Schlüssel sind definiert:

•NAME : entspricht setText(…)

•SHORT_DESCRIPTION : entspricht setToolTipText()…)

•LONG_DESCRIPTION : Text für Online-Helps

•SMALL_ICON : entspricht setIcon(…)

•ACTION_COMMAND_KEY : entspricht setActionCommand(…)

•ACCELERATOR_KEY : entspricht setAcceleratorKey(…)

•MNEMONIC_KEY : entspricht setMnemonic(…)Anwendungsbeispiel:putValue(Action.SHORT_DESCRIPTION, "Action");

Page 5: Actions

04 - Actions 5

JButton JMenuItem JCheckBox JRadioButton JTextField JComboBox

NAME X X X X

SHORT_DESCRIPTION X X X X X

LONG_DESCRIPTION

SMALL_ICON X X

ACTION_COMMAND_KEY

ACCELERATOR_KEY

MNEMONIC_KEY X

Page 6: Actions

04 - Actions 6

Die abstrakte Klasse AbstractActionDie abstrakte Klasse AbstractAction implementiert alle Methoden des Interfaces Action außer der Methode actionPerformed, die vom Interface ActionListener geerbt wird.

Die einfachste Variante der Nutzung ist das Ableiten einer Klasse, die die Methode actionPerformed implementiert.

Die Nutzung ist also genauso einfach wie die Nutzung des Interfaces ActionListener.

Page 7: Actions

04 - Actions 7

Beispiel TestActionimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class TestActions {public static Action act =new AbstractAction("Action Component", new mageIcon("action.gif")){{ putValue(Action.SHORT_DESCRIPTION, "Action ToolTipText");}public void actionPerformed(ActionEvent e) { String src = e.getSource().getClass().getName(); if (src.equals("javax.swing.JComboBox")) { JComboBox cb = (JComboBox)(e.getSource()); if ( !cb.getSelectedItem().equals(getValue(Action.NAME)) ) return; } System.out.println("Action ausgelöst von "+src);}};

Page 8: Actions

04 - Actions 8

public static void main(String[] args) {JFrame fr = new JFrame("TestActions");

JMenuBar mb = new JMenuBar();fr.setJMenuBar(mb);JMenu m = new JMenu("test");mb.add(m);JMenuItem mi = new JMenuItem();mi.setAction(act);m.add(mi);

Container cp = fr.getContentPane();cp.setLayout(new GridBagLayout());GridBagConstraints gbc = new GridBagConstraints();gbc.anchor=GridBagConstraints.WEST;gbc.insets=new Insets(10, 10, 10, 10);gbc.gridx=0;cp.add(new JLabel("JButton"), gbc);JButton jb = new JButton();jb.setAction(act);gbc.gridx=1;cp.add(jb, gbc);

Page 9: Actions

04 - Actions 9

gbc.gridx=0;cp.add(new JLabel("JComboBox"), gbc);final JComboBox co = new JComboBox(new Object [] {"Zeile1", "Zeile2", act.getValue(Action.NAME), "Zeile4", "Zeile5"} );co.setAction(act);gbc.gridx=1;gbc.fill=GridBagConstraints.HORIZONTAL;cp.add(co, gbc);

gbc.gridx=0; gbc.gridwidth=2;final JButton activateButton = new JButton("disable");activateButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { activateButton.setText(act.isEnabled()?"enable":"disable"); act.setEnabled(!act.isEnabled()); }});cp.add(activateButton, gbc);

Page 10: Actions

04 - Actions 1

0

gbc.gridx=0;

cp.add(new JLabel("setToolTipText"), gbc);

final JTextField tt = new JTextField();

tt.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

act.putValue(Action.SHORT_DESCRIPTION, tt.getText());

}

});

gbc.gridx=1;

cp.add(tt, gbc);

fr.setBounds(0, 0, 400, 400);

fr.setVisible(true);

fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}