首先,我知道如何使用以下代码添加 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);
不起作用。我收到一个错误:
Exception in thread "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
无效。
最佳答案
您无法在 LeftPanel 类的构造函数中设置默认按钮,因为面板尚未添加到 JFrame,因此它不知道根 Pane 是什么。
因此,在您的 LeftPanel 中,您需要做几件事:
- 使“execButton”成为实例变量,而不是局部变量。
- 创建一个类似
getDefaultButton()
的方法,该方法将仅返回实例变量。
现在,在创建框架时,您可以在代码中设置默认按钮:
LeftPanel leftpanel = new LeftPanel();
add(leftpanel);
getRootPane().setDefaultButton( leftPanel.getDefaultButton() );
此外,删除代码中的所有空布局。 Swing 被设计为与布局管理器一起使用。
关于java - 如何在 JPanel 类中添加热键 Enter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833847/