gpt4 book ai didi

java - JFrame/JDesktop 未接收到关键焦点

转载 作者:太空宇宙 更新时间:2023-11-04 08:41:57 24 4
gpt4 key购买 nike

我希望我的顶级 JFrame 以及 JDesktopPane 始终监听关键事件,无论当前聚焦/可见哪个组件。

目前,当该程序启动时,JFrame 正在正常接收按键事件。但是,如果单击 JinternalFrame,则事件将不再到达 JFrame。即使我确实在 JInternalFrame(应该是 JDesktop 组件)外部单击,事件也不再像开始时那样到达 JFrame。为什么?谢谢。

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class focus extends JFrame implements KeyListener {

private focus() {
JDesktopPane desktop = new JDesktopPane();
setContentPane(desktop);

addPane(this, "one");
addPane(this, "two");
addPane(this, "three");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(400, 450);

addKeyListener(this);
}

public static void main(String[] args) {
focus t = new focus();
}

private void addPane(JFrame frame, String name) {
JTextArea textArea = new JTextArea();
textArea.setName(name);
textArea.setEditable(false);

addWindow(frame, textArea, name);
}

private JInternalFrame addWindow(JFrame frame, JComponent component,
String name) {
JScrollPane scrollablePane = new JScrollPane(component);

JInternalFrame iframe = new JInternalFrame(name + " ", true, true,
true, true);

iframe.setSize(300, 300);
iframe.setLocation((int) (100 * Math.random()),
(int) (100 * Math.random()));
iframe.setVisible(true);
iframe.getContentPane().add(scrollablePane);
frame.getContentPane().add(iframe);

return iframe;
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}

@Override
public void keyPressed(KeyEvent e) {
System.err.println(e.getKeyChar());
// TODO Auto-generated method stub
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}

最佳答案

事件被分派(dispatch)到具有焦点的组件。

为什么当焦点位于内部框架上时,您希望框架接收事件?您的实际需求是什么?

如果你想调用一个Action,那么最简单的方法是使用带有菜单项的菜单栏,然后​​你可以为每个菜单项分配加速器,这样无论组件是否有焦点,都可以调用Action。

关于java - JFrame/JDesktop 未接收到关键焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5122723/

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