Advanced   Java   Services
Menus und Ereignisse
Back Next Up Home

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

top Back Next Up Home