2014-10-24 7 views
1

У меня есть 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); 
    } 
} 

Этот код будет бросать исключение, но вы видите, что меню будет оставаться выбран.

Как устранить эту проблему?

+0

Не используйте MenuListener, вместо этого добавьте ActionListener в пункт меню. – MadProgrammer

+0

Нельзя создавать кадр внутри апплета, это может привести к возникновению исключения SecurityManager. – MadProgrammer

+1

Вероятно, он остается выбранным **, потому что ** из исключение. – whiskeyspider

ответ

2

Если мы хотим вызвать событие компонентом JMenu в JMenuBar, мы должны попробовать его изменить и добавить JBUtton в JMenuBar вместо JMenu. Потому что JMenu не должен использоваться таким образом. Хотя, если у вас есть JMenuItem внутри JMenu, вы можете вызвать событие и обработать его соответствующим образом.

+2

. Или вы должны использовать 'JToolBar' для добавления' JButton', так как это ожидаемый пользовательский интерфейс, никто не ожидает найти что-либо другое затем меню в строке меню ... – MadProgrammer

+0

Спасибо, что сэкономили мое время. –