我有一个摇摆应用程序。我有一个窗口,应该在单击几个文本字段时显示。(它就像一个带有几个键的虚拟键盘)。该窗口是使用创建的
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();
}
};
在普通窗口中,当我单击文本字段时,会打开模态窗口,按住某个键时,会打开新的弹出键对话框并且所有内容都是可单击的。
但是,当我单击模式弹出窗口中的文本字段时,会打开窗口并按住一个键,也会显示弹出键。但是弹出键中没有可点击的按钮。
可能是什么原因?什么是解决方案?