java - 如何在 JPanel 类中添加热键 Enter?

标签 java swing hotkeys enter

首先,我知道如何使用以下代码添加 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 中,您需要做几件事:

  1. 使“execButton”成为实例变量,而不是局部变量。
  2. 创建一个类似 getDefaultButton() 的方法,该方法将仅返回实例变量。

现在,在创建框架时,您可以在代码中设置默认按钮:

LeftPanel leftpanel = new LeftPanel();
add(leftpanel);
getRootPane().setDefaultButton( leftPanel.getDefaultButton() );

此外,删除代码中的所有空布局。 Swing 被设计为与布局管理器一起使用。

关于java - 如何在 JPanel 类中添加热键 Enter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833847/

相关文章:

jQuery AJAX 通过热键提交

java - 替代 Java.sql.time

java - 将参数传递给 Spring MethodInvokingFactoryBean 参数列表

java - 关闭在另一个 JFrame 中打开的 JFrame

visual-studio - 在 Visual Studio 2008 中在拆分窗口之间跳转的热键是什么

keyboard-shortcuts - 在 SOAPUI 中使用键盘切换请求和响应

java - 使用reduce函数时返回第一个元素

java - 将字符串转换为 TIMESTAMP,以便从 servlet java 插入数据库 oracle

java - 使用 Swing 将背景图像添加到 JFrame

Java gui 空格错误检查