У меня есть JApplet
с панелью меню. Проблема заключается в том, что каждый раз, когда я нажимаю на меню, независимо от результата, он остается выбранным, если я не щелкнул в другом месте на экране.JMenu остается выбранным после щелчка мыши
Вот небольшой пример кода, чтобы изобразить сценарий:
public class Frame extends JApplet{
public static String title = "Tower Defence Game";
JMenuBar menubar;
JMenu menuCreateMap;
@Override
public void init() {
menubar = new JMenuBar();
menuCreateMap = new JMenu("Create Map");
menuCreateMap.addMenuListener(new MenuHandler(new Frame()));
menubar.add(menuCreateMap);
setJMenuBar(menubar);
this.setPreferredSize(new Dimension(getHeight(), getWidth()));
setVisible(true);
}
}
MenuHandler
класс
public class MenuHandler extends Thread implements MenuListener {
Frame frame;
JMenu myMenu;
MenuHandler menuHandler;
MenuHandler() {}
MenuHandler(Frame frame) {
this.frame = frame;
menuHandler = new MenuHandler();
}
@Override
public void menuSelected(MenuEvent e) {
myMenu = (JMenu) e.getSource();
String selectedOption = myMenu.getText();
if(selectedOption.equalsIgnoreCase("Create Map")) {
menuHandler.start();
}
}
public void run() {
JLabel label = new JLabel("Hello World");
label.setText("Hello");
label.setBounds(100, 100, 100, 100);
this.frame.add(label);
}
}
Этот код будет бросать исключение, но вы видите, что меню будет оставаться выбран.
Как устранить эту проблему?
Не используйте MenuListener, вместо этого добавьте ActionListener в пункт меню. – MadProgrammer
Нельзя создавать кадр внутри апплета, это может привести к возникновению исключения SecurityManager. – MadProgrammer
Вероятно, он остается выбранным **, потому что ** из исключение. – whiskeyspider