Обработка событий меню через ID пунктов
Раз:
Код:
package anarok;
public class anarok
{
public static void main(String[] args)
{
AnarokWindow awMainWindow = new AnarokWindow("Main Frame");
}
}
public class anarok
{
public static void main(String[] args)
{
AnarokWindow awMainWindow = new AnarokWindow("Main Frame");
}
}
Код:
package anarok;
import java.awt.*;
import java.awt.event.*;
class AnarokWindow extends Frame
{
public AnarokWindow(String sCaption)
{
super(sCaption);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
MenuListener mlAction = new MenuListener();
//Создание меню
MenuBar mbMainMenu = new MenuBar(); //Новая строка меню
Menu mFile = new Menu("File"); //Создать меню "File"
mFile.addActionListener(mlAction);
Menu mEdit = new Menu("Edit"); //Создать меню "Edit"
mEdit.addActionListener(mlAction);
Menu mAbout = new Menu("About"); //Создать меню "About"
mAbout.addActionListener(mlAction);
//Пункты меню File
MenuItem miNew = new MenuItem("New");
MenuItem miSave = new MenuItem("Save");
MenuItem miSaveAs = new MenuItem("Save as...");
MenuItem miOpen = new MenuItem("Open");
MenuItem miClose = new MenuItem("Close");
MenuItem miExit = new MenuItem("Exit");
//Пункты меню About
MenuItem miAbout = new MenuItem("О программе...");
//Добавить пункты в меню File
mFile.add(miNew);
mFile.addSeparator();
mFile.add(miSave);
mFile.add(miSaveAs);
mFile.addSeparator();
mFile.add(miOpen);
mFile.add(miClose);
mFile.addSeparator();
mFile.add(miExit);
//Добавить пункты в меню About
mAbout.add(miAbout);
//Прикрепить меню к строке меню
mbMainMenu.add(mFile);
mbMainMenu.add(mEdit);
mbMainMenu.add(mAbout);
this.setMenuBar(mbMainMenu); //Установить окну строку меню
this.setBounds(100, 100, 500, 300); //Установить размеры окна
this.setVisible(true); //Показать окно
}
}
import java.awt.*;
import java.awt.event.*;
class AnarokWindow extends Frame
{
public AnarokWindow(String sCaption)
{
super(sCaption);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
MenuListener mlAction = new MenuListener();
//Создание меню
MenuBar mbMainMenu = new MenuBar(); //Новая строка меню
Menu mFile = new Menu("File"); //Создать меню "File"
mFile.addActionListener(mlAction);
Menu mEdit = new Menu("Edit"); //Создать меню "Edit"
mEdit.addActionListener(mlAction);
Menu mAbout = new Menu("About"); //Создать меню "About"
mAbout.addActionListener(mlAction);
//Пункты меню File
MenuItem miNew = new MenuItem("New");
MenuItem miSave = new MenuItem("Save");
MenuItem miSaveAs = new MenuItem("Save as...");
MenuItem miOpen = new MenuItem("Open");
MenuItem miClose = new MenuItem("Close");
MenuItem miExit = new MenuItem("Exit");
//Пункты меню About
MenuItem miAbout = new MenuItem("О программе...");
//Добавить пункты в меню File
mFile.add(miNew);
mFile.addSeparator();
mFile.add(miSave);
mFile.add(miSaveAs);
mFile.addSeparator();
mFile.add(miOpen);
mFile.add(miClose);
mFile.addSeparator();
mFile.add(miExit);
//Добавить пункты в меню About
mAbout.add(miAbout);
//Прикрепить меню к строке меню
mbMainMenu.add(mFile);
mbMainMenu.add(mEdit);
mbMainMenu.add(mAbout);
this.setMenuBar(mbMainMenu); //Установить окну строку меню
this.setBounds(100, 100, 500, 300); //Установить размеры окна
this.setVisible(true); //Показать окно
}
}
Код:
package anarok;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class MenuListener implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
System.out.println(e.getID());
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class MenuListener implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
System.out.println(e.getID());
}
}
Причины:
- программа может быть локализирована под разные языки;
- getActionCommand() требует сравнения строк, что "дороже" сравнения чисел.
В WinAPI при создании меню можно явно указать ID пунктов. Как делать здесь?
Есть вариант:
Код:
class XXXItemListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//Действие для пункта XXX
}
}
{
public void actionPerformed(ActionEvent e)
{
//Действие для пункта XXX
}
}
Спасибо за внимание.