我正在开发一个多人游戏,在菜单中,我需要添加一个字段,玩家可以在其中键入主机 IP。
我正在使用 Graphics2D 制作菜单,并且正在循环更新它:
JFrame screenFrame = screen.getFullScreenWindow();
while (menuIsRunning) {
Graphics2D g = screen.getGraphics();
renderer.drawMenu(g, screen.getWidth(), screen.getHeight(), menuObjects);
screenFrame.getLayeredPane().paintComponents(g);
g.dispose();
screen.update();
}
在那里我也想添加一个 JTextField ,如下所示:
Container contentPane = screenFrame.getContentPane();
contentPane.setLayout(null);
JTextField text = new JTextField("Enter text here", 28);
contentPane.add(text);
text.setBounds(10,10,20,20);
screenFrame.validate();
它出现在屏幕上,但是当我输入它时,几秒钟后,它只是冻结或其他东西(没有错误消息)。我不能再打字了,而且所有其他的 keyActions 也不起作用(比如 escape: exit the game)
我试图用 focusListener 看一些东西:
text.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("focus gained");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("focus lost");
}
});
它说何时获得焦点,但当文本字段冻结时,它并没有说明失去焦点。如果我只是单击文本字段,我仍然可以使用其他功能,但是当我开始键入时它会冻结。
有人知道为什么吗?