1 / 10

Actions

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

ellie
Download Presentation

Actions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Actions

  2. 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 • 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

  3. Das Interface Action • Das 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.

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

  5. Die abstrakte Klasse AbstractAction • Die 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.

  6. Beispiel TestAction import 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); } };

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

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

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

More Related