2013-03-09 2 views
0

사용자가 정보 메뉴를 클릭하면 팝업 창이 나타납니다. Java로 할 수 있습니까? 메뉴를 클릭해도 actionPerformed가 호출되지 않습니다.JMenu에서 actionPerformed

new AbstractAction("Do XY")

를하지만, 넷빈즈는 식별자가 예상되는 것을 저에게 말한다 : 검색을 조금 후 나는이를 사용하려고한다는 것을 발견했다. 이 작업을 수행 할 수있는 다른 방법이 있습니까? 아니면 Java가 메뉴 모음에서 직접 단추를 허용하지 않습니까?

답변

3

물론 자바로이 작업을 수행 할 수 있습니다. 단순히 메뉴에 MenuListener을 추가 할 수 있습니다. 여기

(이것은 또한 메뉴 항목 "정보"전통을 구현) 같은 것은의 예입니다 :이 개체의 메뉴 기능을 오버라이드 (override) 할 수있는 방법은

import java.awt.event.ActionEvent; 

import javax.swing.AbstractAction; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.SwingUtilities; 
import javax.swing.event.MenuEvent; 
import javax.swing.event.MenuListener; 

public class TestAboutMenu { 

    protected void initUI() { 
     final JFrame frame = new JFrame("test"); 
     JMenuBar bar = new JMenuBar(); 
     JMenu help = new JMenu("Help"); 
     help.addMenuListener(new MenuListener() { 

      @Override 
      public void menuSelected(MenuEvent e) { 
       showAboutDialog(frame); 
      } 

      @Override 
      public void menuDeselected(MenuEvent e) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void menuCanceled(MenuEvent e) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     JMenuItem about = new JMenuItem(new AbstractAction("About") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       showAboutDialog(frame); 
      } 
     }); 
     help.add(about); 
     bar.add(help); 
     frame.setJMenuBar(bar); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 

    protected void showAboutDialog(final JFrame frame) { 
     JDialog dialog = new JDialog(frame); 
     dialog.add(new JLabel("About this program")); 
     dialog.setModal(true); 
     dialog.pack(); 
     dialog.setLocationRelativeTo(frame); 
     dialog.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestAboutMenu().initUI(); 
      } 
     }); 
    } 
} 
+0

+1, MenuListener를 잊어 버렸습니다. – camickr

0

이렇게하려면 자신 만의 메뉴 모음 클래스를 작성해야합니다. 하지만 당신은 그런 트릭을 할 수 있습니다 : mouseClicked() 메소드로 마우스 리스너를 작성하십시오. 메뉴 막대를 위에 놓으면 경계가 0, windowWidth(), ~ 20 (메뉴 막대 높이), windowWidth()임을 알 수 있습니다. 그리고 마우스의 위치가이 직사각형에 있는지 확인합니다. 예인 경우 - 팝업 창이 표시됩니다. 그것은 현물 아이디어에 불과하므로 그것이 당신을 위해 작동하는지 알려주십시오.

+0

없다? –

+0

불행히도 나는 어떤 것도 모릅니다. 직접 실험 해 볼 수도 있지만 마우스 클릭 위치 감지 솔루션이 목표를 달성하는 가장 쉬운 방법이라고 생각합니다. –

관련 문제