Я хотел бы знать, есть ли способ обнаружить ввод с клавиатуры, сосредоточив внимание на 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);
}
});
}
}
Добавить того же ключевого прослушивателя в 'JPopupMenu'? – christopher
Привет Крис, я попытался использовать этот textPopupMenu.addKeyListener (textInputListener); но, к сожалению, он не будет слушать какой-либо ввод с клавиатуры во время фокусировки. –
Некоторый код может помочь нам с этой проблемой. – christopher