我有一个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东西很大而且这是一个联网的游戏。任何帮助将不胜感激。
答案 0 :(得分:1)
以下是我解决这个问题的方法。有点hacky,但我认为它有效。
无论何时焦点都转移到聊天文本框(即关闭某个窗口),我将焦点切换到我的按钮栏(始终可见):
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyClient.buttonBarFrame.requestFocusInWindow(); //so chat does not request focus
}
});