4

我有一个摇摆应用程序。我有一个窗口,应该在单击几个文本字段时显示。(它就像一个带有几个键的虚拟键盘)。该窗口是使用创建的

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();
    }
};

在普通窗口中,当我单击文本字段时,会打开模态窗口,按住某个键时,会打开新的弹出键对话框并且所有内容都是可单击的。

但是,当我单击模式弹出窗口中的文本字段时,会打开窗口并按住一个键,也会显示弹出键。但是弹出键中没有可点击的按钮。

可能是什么原因?什么是解决方案?

4

0 回答 0