2012-12-29 6 views
2

JPopupMenu의 JMenuItems에 대한 바로 가기가 필요합니다. 아래 코드에서 바로 가기가 작동하지 않습니다.JPopupMenu의 JMenuItems에 대한 바로 가기 만들기

import java.awt.event.*; 
import javax.swing.*; 
import static java.awt.event.InputEvent.CTRL_DOWN_MASK; 

public class test3 implements ActionListener { 

    JPopupMenu pop; 

    void gui() { 
     JFrame f = new JFrame(); 

     pop = new JPopupMenu(); 
     JMenuItem it1 = new JMenuItem("new"); 
     JMenuItem it2 = new JMenuItem("old"); 
     it1.setAccelerator(KeyStroke.getKeyStroke('N', CTRL_DOWN_MASK)); 
     it2.setAccelerator(KeyStroke.getKeyStroke('O', CTRL_DOWN_MASK)); 
     it1.addActionListener(this); 
     it2.addActionListener(this); 
     pop.add(it1); 
     pop.add(it2); 
     JTextArea ta = new JTextArea(20, 40); 
     ta.add(pop); 

     ta.addMouseListener(new MouseAdapter() { 

      public void mousePressed(MouseEvent me) { 
       if (me.isPopupTrigger()) { 
        pop.show(me.getComponent(), me.getX(), me.getY()); 
       } 
      } 

      public void mouseReleased(MouseEvent me) { 
       if (me.isPopupTrigger()) { 
        pop.show(me.getComponent(), me.getX(), me.getY()); 
       } 
      } 
     }); 

     f.add(ta); 
     f.pack(); 

     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent ae) { 
     if (ae.getActionCommand().equals("new")) { 
      System.out.println("new"); 
     } else if (ae.getActionCommand().equals("old")) { 
      System.out.println("old"); 
     } 

    } 

    public static void main(String[] argv) { 
     test3 t = new test3(); 
     t.gui(); 
    } 
} 
+0

코드를 포맷하려면 텍스트를 선택하고 중괄호 ({}) 모양의 아이콘을 클릭하십시오. 포함 된 br 태그를 제거 할 수 있습니다. –

+0

"일하지 않는다"는 것은 무엇을 의미합니까? –

+0

내가 Ctrl + n을 누르면 cmd에서 새로운 내용을 인쇄해야하지만 그렇지 않으면 ... actionevent가 발생하지 않습니다. 하지만 마우스 오른쪽 버튼을 클릭하고 새로운 작업을 클릭하면됩니다. – Roronoa

답변

3

게시 한 코드의 유일한 문제점은 구문 오류입니다. 그렇지 않으면 작동합니다.

KeyEvent.CTRL_DOWN_MASK 

그래서 라인이 있어야한다 :

it1.setAccelerator(KeyStroke.getKeyStroke('N', KeyEvent.CTRL_DOWN_MASK)); 

그리고 당신의 코드에서 정적 수입 줄을 제거하면 것을 주장 할 필요가 있으므로 CTRL_DOWN_MASK는의 KeyEvent 클래스의 상수이다. 컴파일하고 예상대로 작동해야합니다.

+0

그게 전부 야. 내가 더 조심해야 해 ..... 고마워. – Roronoa