Java JRootPane#设置默认按钮(theButton)不执行任何操作

Java JRootPane#设置默认按钮(theButton)不执行任何操作,java,swing,awt,Java,Swing,Awt,我希望JFrame中我唯一的JButton成为默认按钮,并响应ENTER在其容器中的任意位置按下 因此我调用了JRootPane#setDefaultButton(theButton),但什么也没发生: package tests; import org.junit.Test; import javax.swing.*; import java.awt.*; public class HierarchyTest { @Test public void test(){

我希望
JFrame
中我唯一的
JButton
成为默认按钮,并响应
ENTER
在其容器中的任意位置按下

因此我调用了
JRootPane#setDefaultButton(theButton)
,但什么也没发生:

package tests;

import org.junit.Test;
import javax.swing.*;
import java.awt.*;

public class HierarchyTest {
    @Test
    public void test(){
        JDialog win = new JDialog(null, "test", Dialog.ModalityType.APPLICATION_MODAL);
        win.setBounds(600,300,400,200);
        CommonPanel panel = new CommonPanel();
        win.add(panel);
        panel.init();
        win.setVisible(true);
    }
}
CommonPanel

package tests;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

class CommonPanel extends JPanel {

    private final JButton btn;
    private final String format = "<html><style> code { font-size: inherit; } </style>" +
            "<body style='font-size:18px'><h1>%s</h1>%s</body></html>";

    CommonPanel() {
        setLayout(new BorderLayout());

        final JTextPane pane = new JTextPane();
        pane.setContentType("text/html");
        pane.setEditable(false);
        pane.setText(String.format(format, "TITLE", "BODY"));
        add(pane, BorderLayout.CENTER);

        JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        add(bottomPanel, BorderLayout.SOUTH);

        btn = new JButton("Change text");
        btn.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pane.setText(String.format(format, "Yeaaaaaay!!!", "The eagle has landed!!!"));
            }
        });
        bottomPanel.add(btn);
    }

    void init() {
        JRootPane rootPane = SwingUtilities.getRootPane(btn);
        rootPane.setDefaultButton(btn);
    }
}
包测试;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
类CommonPanel扩展了JPanel{
专用最终按钮btn;
私有最终字符串格式=“代码{font size:inherit;}”+
“%s%s”;
公共事务委员会(){
setLayout(新的BorderLayout());
最终JTextPane=新的JTextPane();
pane.setContentType(“text/html”);
pane.setEditable(false);
setText(String.format(格式,“TITLE”,“BODY”);
添加(窗格,BorderLayout.CENTER);
JPanel bottomPanel=newjpanel(newflowlayout(FlowLayout.CENTER));
添加(底部面板,BorderLayout.SOUTH);
btn=新的JButton(“更改文本”);
btn.addActionListener(新的AbstractAction(){
@凌驾
已执行的公共无效操作(操作事件e){
pane.setText(String.format(格式为“Yeaaaaay!!!”,“鹰已经降落!!!”);
}
});
底部面板。添加(btn);
}
void init(){
JRootPane rootPane=SwingUtilities.getRootPane(btn);
rootPane.setDefaultButton(btn);
}
}

当我点击
btn
时,文本会按预期变化,但按
ENTER
什么也不做(我必须按
TAB
到按钮,然后才能按
ENTER
获得所需的结果)。

即使JTextPane不可编辑,它仍然以焦点开始,而且似乎是吞咽输入键之前,它可以得到根痛。考虑添加<代码>窗格.StVoCube(FALSE);<代码>到您的GUI。在询问问题时发布适当的提示。这就是您的代码应该包含用于创建框架的main()方法。“org.junit.test”是许多人不会拥有的第三方类。我们应该能够复制/粘贴/编译和测试您的代码,而无需下载其他库。@HoverCraftFullOfels,请将您的注释更改为答案,以便我可以接受。