Java 默认按钮为“在自定义组件中聚焦时不侦听回车键”
我有一个JFrame,它有定制的swing组件、JTextfield和JButton。JButton已设置为默认按钮。当我在文本字段处于焦点的瞬间按下回车键时,按钮将触发。但当我按下enter键时,焦点中的自定义组件按钮将不会触发Java 默认按钮为“在自定义组件中聚焦时不侦听回车键”,java,swing,focus,custom-component,Java,Swing,Focus,Custom Component,我有一个JFrame,它有定制的swing组件、JTextfield和JButton。JButton已设置为默认按钮。当我在文本字段处于焦点的瞬间按下回车键时,按钮将触发。但当我按下enter键时,焦点中的自定义组件按钮将不会触发 package org.laki.test; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.FlowLayo
package org.laki.test;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
public class TestFrame extends JFrame {
private JTextField textField;
public TestFrame() {
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
textField = new JTextField();
getContentPane().add(textField);
textField.setColumns(10);
ComboBox comboBox = new ComboBox();
comboBox.addItem("lakshman");
comboBox.addItem("tharindu");
comboBox.addItem("Ishara");
getContentPane().add(comboBox);
JButton btnNewButton = new JButton("Test");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("enter is hitting...!!!");
}
});
getContentPane().add(btnNewButton);
this.rootPane.setDefaultButton(btnNewButton);
}
private class ComboBox extends JComboBox<String>
{
private static final long serialVersionUID = 10000012219553L;
@Override
public void processKeyEvent(final KeyEvent event)
{
if ((event.getKeyCode() == KeyEvent.VK_DOWN) ||
(event.getKeyCode() == KeyEvent.VK_SPACE))
{
doSomthing();
}
else if(event.getKeyCode() == KeyEvent.VK_ENTER)
{
//I added this to capture the enter event
}
}
}
public static void main(String[] args) {
TestFrame testframe = new TestFrame();
testframe.setSize(300, 400);
testframe.setVisible(true);
}
}
package org.laki.test;
导入javax.swing.JFrame;
导入javax.swing.JTextField;
导入javax.swing.JButton;
导入java.awt.FlowLayout;
导入javax.swing.JComboBox;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
导入java.awt.event.KeyEvent;
公共类TestFrame扩展了JFrame{
私有JTextField textField;
公共测试框架(){
getContentPane().setLayout(新的FlowLayout(FlowLayout.CENTER,5,5));
textField=新的JTextField();
getContentPane().add(文本字段);
textField.setColumns(10);
ComboBox ComboBox=新建ComboBox();
comboBox.addItem(“lakshman”);
comboBox.addItem(“tharindu”);
comboBox.addItem(“Ishara”);
getContentPane().add(组合框);
JButton btnNewButton=新JButton(“测试”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件arg0){
System.out.println(“回车正在点击…!!!”);
}
});
getContentPane().add(btnNewButton);
this.rootPane.setDefaultButton(btnNewButton);
}
私有类ComboBox扩展了JComboBox
{
私有静态最终长serialVersionUID=1000012219553L;
@凌驾
public void processKeyEvent(最终KeyEvent事件)
{
if((event.getKeyCode()==KeyEvent.VK_DOWN)||
(event.getKeyCode()==KeyEvent.VK_SPACE))
{
dosomshing();
}
else if(event.getKeyCode()==KeyEvent.VK_ENTER)
{
//我添加这个来捕获enter事件
}
}
}
公共静态void main(字符串[]args){
TestFrame TestFrame=新的TestFrame();
testframe.setSize(300400);
testframe.setVisible(true);
}
}
我无法删除processKeyEvent方法,因为它在自定义组件中执行特殊事件。
当我在“自定义组件”的“聚焦时刻”中按enter键时,应该如何启动按钮 您的自定义组件可能已被覆盖,不允许调用其父实现。检查,如果没有,则使用
super.processKeyEvent(event);
为了更快地获得更好的帮助,请发布一个。并添加说明,说明您这样做的原因way@mKorbel:我想在JFrame中保留一个默认按钮。但是当焦点集中在组合框上时,当我点击“输入默认值”按钮时不会触发。错误,不是,(即使我在这里发布了如何执行和覆盖所有内容)使用ListSelectionListener,每个事件都在一个位置