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,请将您的注释更改为答案,以便我可以接受。