gpt4 book ai didi

java - 在 JPanel 中设置焦点

转载 作者:行者123 更新时间:2023-11-29 07:00:07 29 4
gpt4 key购买 nike

我希望我的焦点在 CenterPanel.java 中,但焦点在 TopPanel.java 类中。

主程序.java

public class Main {
public static void main(String[] args) {
new MainFrame();
}
}

主框架.java

public class MainFrame extends JFrame {
public MainFrame() {
super();
setTitle("Title");
setVisible(true);
MainPanel mainpanel = new MainPanel();
setContentPane(mainpanel);
pack();
}
}

MainPanel.java(从Main.java调用)

public class MainPanel extends JPanel {
private TopPanel topPanel;
private CenterPanel centerPanel;
public MainPanel() {
createComponents();
addComponents();
}

private void createComponents() {
centerPanel = new CenterPanel();
topPanel = new TopPanel(centerPanel);
}

private void addComponents() {
add(centerPanel);
add(topPanel, BorderLayout.NORTH);
}
}

TopPanel.java

public class TopPanel extends JPanel {
private JButton aButton;
private CenterPanel centerPanel;

public TopPanel(CenterPanel c) {
centerPanel = c;
createComponents();
addComponents();
}

private void createComponents() {
aButton = new Button("Button");
}

private void addComponents() {
add(aButton);
}
}

中心面板.java

public class CenterPanel extends JPanel {
public CenterPanel() {
setFocusable(true);
setRequestFocusEnabled(true);
requestFocus();

addKeyListener(new MoveController());
}
}

移动 Controller .java

public class MoveController extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Pressed");
}

@Override
public void keyReleased(KeyEvent e) {
System.out.println("Released");
}
}

最佳答案

您应该使用 requestFocusInWndow(),而不是 requestFocus()。阅读 API 文档了解原因。

此外,只有当组件显示在可见的 GUI 中时,您才能请求关注该组件。鉴于您的代码结构,一旦您使 GUI 可见,就不容易访问“CenterPanel”。

查看 Dialog Focus它展示了如何使用 RequestFocusListener 来请求对组件的关注,即使 GUI 尚不可见。

关于java - 在 JPanel 中设置焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485660/

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