Advanced
Java
Services
|
Menus und Ereignisse |
Mögliche Ereignisse
Die Möglichkeiten, auf Ereignisse zu reagieren sind hier recht beschränkt. Da MenuComponent sich
nicht von Component ableitet entfallen hier sämtliche Lowlevelereignisse wie Mouse oder Keyboardevents.
Die einzigen beiden Ereignisse, mit denen wir arbeitern können sind Action- und Itemereignisse.
Menu
Die Klasse Menu erbt zwar die addActionListener()-Methode von MenuItem, die Komponente löst aber
keine Ereignisse aus.
MenuItem
Im Gegensatz zur Vermutung, die der Name nahelegt, löst ein MenuItem keine Itemereignisse, sondern
Actionereignisse aus. Wie bei ActionEreignissen üblich, ist es einfach, darauf zu reagieren.
//..
Menu dateiMenu = new Menu("file");;
MenuItem dateiMenuOpenItem = new MenuItem("open");
//..
dateiMenuOpenItem.addActionListener( new OpenHandler() );
// OpenHandler ist eine Klasse, die ActionListener implementiert
// in ihr steht die Methode actionPerformed
public void actionPerformed(ActionEvent e)
{
System.out.println( e.getSource().getClass().getName() );
System.out.println( e.paramString() );
}
CheckboxMenuItem
CheckboxMenuItem erbt die Methode addActionListener() von MenuItem, sendet aber keine ActionEreignisse.
CheckboxMenuItem verfügt jedoch zusätzlich über die Methode addItemListener() und Itemereignissee werden
gesendet. Das Reaktionsschema ist ähnlich wie bei Actionereignissen. Die folgende Skizze blendet eine
Statuszeile aus und ein. Als Statuszeile dient dabei ein Label.
//..
Menu ansichtMenu = new Menu("Ansicht");;
MenuItem ansichtMenuStatusItem = new CheckboxMenuItem("Statuszeile", true);
// Menuitemeintrag enthält einen Haken
ansichtMenuStatusItem.addItemListener( new StatusHandler() );
// StatusHandler ist eine Klasse, die ItemListener implementiert
// in ihr steht die Methode itemStateChanged
public void itemStateChanged(ItemEvent e)
{
statusLabel.setVisible( !statusLabel.isVisible());
// statusLabel muß der Methode bekannt sein
validate();
}
Alternativ kann man auch über die Methode event.getSource() auf die Ereignisquelle zugreifen:
//..
Menu ansichtMenu = new Menu("Ansicht");;
MenuItem ansichtMenuStatusItem = new CheckboxMenuItem("Statuszeile", true);
// Menuitemeintrag enthält einen Haken
ansichtMenuStatusItem.addItemListener( new StatusHandler() );
// StatusHandler ist eine Klasse, die ItemListener implementiert
// in ihr steht die Methode itemStateChanged
public void itemStateChanged(ItemEvent e)
{
CheckboxMenuItem item = (CheckboxMenuItem)e.getSource();
statusLabel.setVisible( item.getState() );
validate();
}