除非单击,否则 JTextField 不会获得焦点

JTextField to not gain focus unless clicked

我有一个 JTextField 定义如下:

JTextField chatTextField = new JTextField();
chatTextField.setRequestFocusEnabled(false);
chatTextField.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        chatTextField.requestFocusInWindow();
    }
});
chatTextField.setFocusTraversalKeysEnabled(false);
chatTextField.setVisible(true);

为了简单起见,我删除了一些其他方法调用。

我的 chatTextField 位于添加到 'theDesktop' 的 JPanel 中。

JFrame frame = new JFrame("Test");
JLayeredPane theDesktop = new JDesktopPane();
frame.getContentPane().add(theDesktop);
frame.setFocusable(true);

我还有许多其他 JPanel 也添加到 'theDesktop' 中,代表其他 windows(背包、银行等)。我只希望 chatTextField 在我单击鼠标进入它时获得焦点(或者当我按下 enter 时,我也通过操作连接了它)。

有时在关闭其他 windows 时它会变得很集中,这让我抓狂。您无法关闭聊天面板或按钮面板。任何人都可以看到任何错误吗?我在想出 SSCCE 时遇到了麻烦,因为我的 gui 东西很大,而且这是一个联网游戏。任何帮助将不胜感激。

这是我解决这个问题的方法。有点hacky,但我想它有效。

每当焦点转移到聊天文本框(即关闭某个 window)时,我将焦点切换到我的按钮栏(始终可见):

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        MyClient.buttonBarFrame.requestFocusInWindow(); //so chat does not request focus
    }
});