gpt4 book ai didi

java - KeyEvent 不是由 JFrame java 生成的吗?

转载 作者:行者123 更新时间:2023-12-02 05:38:51 24 4
gpt4 key购买 nike

我有一个java程序,里面有一个JFrame和3个JButton。我已经向 jframe 添加了一个 keylistener。当我运行该程序时,会打开一个 jframe 窗口,并且默认选择第一个按钮。我的问题是这个 JFrame 没有生成 KeyEvent。现在,除了向 jframe 添加 KeyListener 之外,我还向按钮添加了 KeyListener。现在按键事件正在由按钮生成。

如何让 JFrame 生成 KeyEvent 而不是 JButton 生成它们?

实际上,我的主要目的是为按钮构建键盘快捷键。

最佳答案

看看这里 How to Use Key Bindings .
keylistener 的替代方案.

这是一个小示例,它有一个具有焦点的按钮并处理 KeyEvent (F2)。
在 F2 键上单击键绑定(bind)过程中,执行一个执行 System.out 打印的 ButtonClick。

public class Example {
static public void main( String[] s ) {
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.getContentPane().setLayout( new BorderLayout() );
frame.setBounds( 50, 50, 600, 600 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
final JButton button = new JButton( new AbstractAction("MyButton") {
@Override
public void actionPerformed( ActionEvent e ) {
System.out.println("Button Clicked");
}
});
frame.getContentPane().add( button );
frame.getRootPane().setDefaultButton( button );

KeyStroke f2 = KeyStroke.getKeyStroke("F2");
frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(f2, "clickButton");
frame.getRootPane().getActionMap().put("clickButton", new AbstractAction() {
@Override
public void actionPerformed( ActionEvent e ) {
button.doClick();
}
});
frame.setVisible( true );
// the Button has the focus
button.requestFocus();
// generate a KeyEvent 'F2'
KeyboardFocusManager.getCurrentKeyboardFocusManager().dispatchKeyEvent( new KeyEvent( frame, KeyEvent.KEY_PRESSED, 0, f2.getModifiers(), f2.getKeyCode(), f2.getKeyChar() ) );
}
});
}
}

关于java - KeyEvent 不是由 JFrame java 生成的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6922227/

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