2013-05-08 4 views
0

JpopupMenu에 초점을 맞추면서 키보드 입력을 감지 할 수있는 방법이 있는지 알고 싶습니다. 키보드에서 입력 감지가있을 때마다 JPopupMenu에 대한 포커스를 제거합니다. 이것이 가능한가?JpopupMenu (Java)에 초점을 맞추면서 키보드 입력 감지

감사합니다.

다음은 내가 작성한 간단한 코드입니다.

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import java.net.*; import java.io.*; public class testClass { static JPopupMenu textPopupMenu = new JPopupMenu("MENU"); final static JTextArea textInput = new JTextArea(50,80); final static JPanel overallPanel = new JPanel(); final static JFrame overallFrame = new JFrame("Test"); public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final ActionListener actionListener1 = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { textPopupMenu.setFocusable(false); } }; KeyListener textInputListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { //Get the suggested words from the function and populate them to the JMenuItem textPopupMenu = new JPopupMenu("MENU"); for(int i=0;i<5;i++) { switch(i) { case 0: JMenuItem item1 = new JMenuItem("A"); textPopupMenu.add(item1); break; case 1: JMenuItem item2 = new JMenuItem("B"); textPopupMenu.add(item2); break; case 2: JMenuItem item3 = new JMenuItem("C"); textPopupMenu.add(item3); break; case 3: JMenuItem item4 = new JMenuItem("D"); textPopupMenu.add(item4); break; case 4: JMenuItem item5 = new JMenuItem("E"); textPopupMenu.add(item5); break; }; } textPopupMenu.setFocusable(true); if (textPopupMenu.isVisible()) { textPopupMenu.setLocation(0, 0 + 20); } else { textPopupMenu.show(textInput,0, 0 + 20); } } }; textInput.addKeyListener(textInputListener); overallPanel.add(textInput); overallFrame.getContentPane().add(overallPanel); overallFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);`enter code here` overallFrame.setSize(1000, 900); overallFrame.setLocationRelativeTo(null); overallFrame.setVisible(true); } }); } }
+0

'JPopupMenu'에 동일한 키 수신기를 추가 하시겠습니까? – christopher

+0

Chris 님,이 textPopupMenu.addKeyListener (textInputListener)를 사용하여 시도했습니다. 그러나 불행히도, 초점이 맞추어 져있는 동안에는 키보드의 입력을 듣지 않을 것입니다. –

+0

일부 코드는이 문제와 관련하여 도움이 될 수 있습니다. – christopher

답변

0

예의 수는 JPopMenu에 초점이 맞춰 동안 registerKeyboardAction

KeyStroke keystroke = KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, 0, false); 
    jpopMenu.registerKeyboardAction(actionListener, keystroke, JComponent.WHEN_FOCUSED); 

JComponent.WHEN_FOCUSED 키보드에서 입력 감지에 당신을 수 있도록 사용 할 수 있습니다.

+0

안녕하세요, Alpesh, 답변 해 주셔서 감사합니다. 나는 당신의 방법을 시도했으나 효과가 없었습니다. 여전히 JPopupMenu에 초점을 맞추고 있습니다. 나는 백그라운드에서 텍스트 영역을 가지고 있고, JpopupMenu가 아직 초점을 맞추고있는 동안 텍스트 영역에 아무 것도 쓸 수 없다. –

+0

@StephenFebrian, jpopmenu 모달을 false로 설정하십시오. –

+0

@StephenFebrian 코드에 무엇이 포함되어 있는지 파악할 수 있도록 코드를 붙여주십시오. –

1

나는 왜 그들이 이것을했는지는 확실하지 않지만, JPopupMenu.addMenuKeyListener()을 사용해야 만합니다.

이벤트를 두 번 전달한 결과 event.getWhen()에서 얻은 마지막 이벤트의 시간을 저장하고 마지막으로 저장된 시간보다 새로운 이벤트 만 처리해야했습니다.