首先,我知道如何使用以下代码添加Enter热键:
JPanel panel = new JPanel();
//...
JButton button = new JButton("Execute");
panel.getRootPane().setDefaultButton(button); // Hotkey "Enter" by default
// ...
panel.add(button);
但在这种情况下,下面的代码
class LeftPanel extends JPanel
{
LeftPanel()
{
setLayout(null);
setBounds(2, 42, 146, 252);
button();
}
void button()
{
JButton exebutton = new JButton("Execute");
//getRootPane().setDefaultButton(exebutton); // Hotkey "Enter" by default
exebutton.setMnemonic(KeyEvent.VK_ENTER); // Shortcut: Alt + Enter
exebutton.setBounds(4, 18, 138, 47);
add(exebutton);
}
}
如何添加Enter热键? getRootPane().setDefaultButton(exebutton);
不起作用。我收到了一个错误:
线程中的异常" main"显示java.lang.NullPointerException
这是我的框架类
public class MyFrame extends JFrame
{
MyFrame()
{
setTitle("Frame Test");
setSize(400, 200);
setLayout(null);
LeftPanel leftpanel = new LeftPanel();
add(leftpanel);
setVisible(true);
setDefaultCloseOperation(MyFrame.EXIT_ON_CLOSE);
}
}
和我的主要
public static void main(String[] args)
{
new MyFrame();
}
Alt+Enter
快捷方式有效,但不是Enter
。
答案 0 :(得分:4)
您无法在LeftPanel类的构造函数中设置默认按钮,因为该面板尚未添加到JFrame中,因此它不知道根窗格是什么。
所以在你的LeftPanel中你需要做几件事:
getDefaultButton()
的方法,它只返回实例变量。现在,在您创建框架的代码中,您可以设置默认按钮:
LeftPanel leftpanel = new LeftPanel();
add(leftpanel);
getRootPane().setDefaultButton( leftPanel.getDefaultButton() );
此外,摆脱代码中的所有null布局。 Swing旨在与布局管理器一起使用。
答案 1 :(得分:3)
在MyFrame类中添加@ManyToOne(fetch = FetchType.LAZY)
@MapsId("attributeId")
private AttributeNameVo attributeNameVo;
,如下所示
getRootPane().setDefaultButton(exebutton);
确保您可以通过在任何方法之前声明它来访问您的JButton
public class MyFrame extends JFrame
{
MyFrame()
{
setTitle("Frame Test");
setSize(400, 200);
setLayout(null);
LeftPanel leftpanel = new LeftPanel();
add(leftpanel);
getRootPane().setDefaultButton(leftpanel.getDefaultBtn());
setVisible(true);
setDefaultCloseOperation(MyFrame.EXIT_ON_CLOSE);
}
}
答案 2 :(得分:0)
另一种方式,它不需要以任何方式改变主体。将其添加到您的"class:=username","type:=username"
子类:
JPanel
这是有效的,因为当布局面板时(例如通过调用@Override
public void addNotify() {
super.addNotify();
getRootPane().setDefaultButton(exebutton);
}
),方法setVisible()
一直在组件树下调用。