gpt4 book ai didi

java - 在 JFrame 中获取输入焦点时遇到问题

转载 作者:行者123 更新时间:2023-12-02 03:15:40 25 4
gpt4 key购买 nike

这是(简化的)JPanel 类:

import java.awt.Graphics;
import javax.swing.JPanel;


@SuppressWarnings("serial")
public class Preface extends JPanel{


public Preface(){
this.addKeyListener(new Controls());
this.requestFocusInWindow();
System.out.println(this.hasFocus());//false
this.repaint();
}

public void paintComponent(Graphics g){
super.paintComponent(g);

g.drawImage(Tetris.getTexture("PrefacePoster.jpg"), 0, 0, 420, 556, null);
}

}

我在让按键事件正常工作时遇到问题,并意识到我的面板一开始就没有获得输入焦点,因此没有生成任何按键事件。

我尝试过grabFocus()、requestFocusInWindow()、requestFocus()等,但hasFocus()总是返回false。

为什么我的 JPanel 没有获得输入焦点?有什么办法可以强制他们这样做吗?

最佳答案

默认情况下,组件不可聚焦。所以你需要:

setFocusable( true );

在构造函数中。其他方法 requestFocusInWindow() 仅适用于可见 JFrame 上的可见组件。从构造函数调用该方法不会执行任何操作。

与 repaint() 方法相同。该组件尚不可见,因此构造函数中不需要该语句。

not generating any KeyEvents.

您不应该使用 KeyListener 来监听 KeyEvent。相反,您应该使用 Key Bindings 。即使组件没有焦点,按键绑定(bind)也会起作用。

关于java - 在 JFrame 中获取输入焦点时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40349859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com