Actions

Post on 19-Jan-2016

37 views 1 download

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

04 - Actions

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

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.

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");

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

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.

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);}};

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);

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);

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);

}

}