除非点击,否则JTextField无法获得焦点

时间:2016-01-26 21:19:03

标签: java swing focus

我有一个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也被添加到了桌面'代表其他窗户(背包,银行等)。我只想让chatTextField在我点击鼠标时获得焦点(或者当我按下Enter键时我也通过动作连接了它)。

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

1 个答案:

答案 0 :(得分:1)

以下是我解决这个问题的方法。有点hacky,但我认为它有效。

无论何时焦点都转移到聊天文本框(即关闭某个窗口),我将焦点切换到我的按钮栏(始终可见):

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