java - 如何向 JOptionPane 按钮添加鼠标监听器?

标签 java swing

我想更改 JOptionPane.ShowMessageDialog 上按钮的外观。 我已经设法用

更改按钮标题
UIManager.put("OptionPane.okButtonText", "Text I want");

现在,我的下一个目标是让 Button 与我的应用程序其余部分中的按钮一样工作。也就是说,当鼠标悬停在其上时,它会更改背景和字体颜色。 在我的其余按钮上,我添加了鼠标监听器,如下所示:

    //setting change color on hover
        private final MouseListener mouseAction = new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                JButton rollOver = (JButton)e.getSource();
                if (rollOver.isEnabled()) {
                    rollOver.setBackground(new Color(163, 184, 204));
                    rollOver.setForeground(Color.WHITE);
                    rollOver.setFont(b);
                }
            };

            @Override
            public void mouseExited(MouseEvent e) {
                JButton rollOver = (JButton)e.getSource();
                if (rollOver.isEnabled()) {
                    rollOver.setBackground(new Color(230, 230, 230));
                    rollOver.setForeground(Color.BLACK);
                    rollOver.setFont(f);
                }
            };
        };

之前在代码中我设置了字体变量:

    Font f = new Font("System", Font.PLAIN, 12);
    Font b = new Font("System", Font.BOLD, 12);

我可以从头开始创建新的对话框并实现此行为,但这有点过分了。

是否有某种方法可以访问 JOptionPane 上的 Button 并添加鼠标监听器 到它吗?

最佳答案

UIManager.put("OptionPane.okButtonText", "Text I want");

以上内容将更改您创建的所有 JOptionPanes 上所有“确定”按钮的文本。

如果您想更改特定 JOptionPane 上单个按钮上的文本,则 阅读 Swing 教程中 Customizing Button Text 的部分.

Is there some way to access Button on JOptionPane and add mouse listener to it?

当您使用静态 showXXX(...) 方法时,会创建一个模态 JDialog,因此您无法访问该对话框或其组件,直到对话框关闭为止,但为时已晚。

因此,您需要手动创建 JOptionPane 并将其添加到 JDialog 中。通过阅读 JOptionPane API 并查看标题为“直接使用” 的部分,可以了解执行此操作的基础知识。

创建 JOptionPane 后(在使对话框可见之前),您可以在选项 Pane 中搜索按钮并向每个按钮添加一个 MouseListener。为了帮助您解决此问题,您可以使用 Swing Utils类(class)。它将对选项 Pane 进行递归搜索,并在列表中将按钮返回给您。然后,您可以遍历 List 并添加 MouseListener

使用此帮助器类的基本代码是:

JOptionPane optionPane = new JOptionPane(
    "Are you sure you want to exit the application",
    JOptionPane.QUESTION_MESSAGE,
    JOptionPane.YES_NO_CANCEL_OPTION);

List<JButton> buttons = SwingUtils.getDescendantsOfType(JButton.class, optionPane, true);

for (JButton button: buttons)
{
    System.out.println( button.getText() );
}

关于java - 如何向 JOptionPane 按钮添加鼠标监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996810/

相关文章:

java - 使 JComboBox 透明

java - jPanel 的背景图像不起作用

java - 为 JPanel 创建构造函数来创建圆圈?

java - 来自证书颁发机构的 java 代码签名需要多少钱?

java - 实现Hadoop计数器时主线程中的IllegalStateException

java - org.junit.Assert 本身的 JUnit NoClassDefFoundError

java - 3D多维数组输出与初始化数据不匹配

java - JFrame 不会出现。主要方法不起作用

java - 在 Android 运行时请求位置权限

java - 如何在服务中保存简单的 CRUD 代码,就像 GenericDao/JpaRepository?