我有一个swing应用程序。我有一个Window,应该在点击几个文本字段时显示。(它就像一个键盘很少的虚拟键盘)。 该窗口是使用
创建的Window wdw= new JDialog();
它也设置为模态。 ((JDialog) wdw).setModal(true);
键添加了鼠标侦听器。单击并按住键时,它会显示另一个显示额外几个按钮的JDialog。
下面是创建该窗口的方法,该窗口在按住键时被调用。
private void createPopupKeys(MouseEvent e) {
JButton keyBtn = (JButton)e.getSource();
Window parentWindow = SwingUtilities.windowForComponent(keyBtn);
Window dialog = new JDialog(parentWindow);
dialog.setFocusable(true);
dialog.setFocusableWindowState(true);
JPanel contP = (JPanel)((JDialog) dialog).getContentPane();
contP.setPreferredSize(new Dimension(150, 40));
JPanel pnl = new JPanel();
String[][] popupKeys = {{"123","123","123"},
{"124","124","196"},
{"125","125","197"},
{"126","126","198"},
};
for (int i = 0; i < popupKeys.length; i++) {
JButton btn = new JButton(popupKeys[i][0]);
btn.setActionCommand(popupKeys[i][2]);
btn.setName("popupkey"+i);
btn.addMouseListener(this);
btn.setMinimumSize(new Dimension(30, 30));
btn.setPreferredSize(new Dimension(30, 30));
btn.setFocusable(false);
btn.setFont(new Font("Dialog", Font.BOLD, 14));
pnl.add(btn);
}
pnl.setPreferredSize(new Dimension(150, 40));
contP.add(pnl);
dialog.setAlwaysOnTop(true);
Point loc = keyBtn.getLocationOnScreen();
dialog.setLocation(loc.x - 20 , loc.y - 50);
dialog.pack();
dialog.setVisible(true);
dialog.addWindowFocusListener(windowListener);
dialog.addWindowListener(windowListener);
}
WindowAdapter windowListener = new WindowAdapter() {
@Override
public void windowLostFocus(WindowEvent e) {
JDialog dialog = (JDialog) e.getSource();
dialog.setVisible(false);
dialog.dispose();
}
};
在普通窗口中,当我单击文本字段时,将打开模态窗口,按住某个键后,将打开新的弹出键对话框,并且所有对话框都可以单击。
但是当我点击模态弹出窗口中的文本字段时,窗口会打开,按住某个键时,也会显示弹出键。但是弹出键中没有按钮可以点击。
可能是什么原因?最新解决方案是什么?