2

我正在开发一个多人游戏,在菜单中,我需要添加一个字段,玩家可以在其中键入主机 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");
        }
    });

它说何时获得焦点,但当文本字段冻结时,它并没有说明失去焦点。如果我只是单击文本字段,我仍然可以使用其他功能,但是当我开始键入时它会冻结。

有人知道为什么吗?

4

0 回答 0