Java 默认按钮为“在自定义组件中聚焦时不侦听回车键”

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

我有一个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.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,每个事件都在一个位置