使用Swing JDialog OK / Cancel按钮图标以及自定义图标

时间:2013-10-01 19:30:29

标签: java swing joptionpane

我正在通过JOptionPane.showOptionDialog创建对话框。如果我设置Object[] options = null并设置int optionType = JOptionPane.OK_CANCEL_OPTION,我会得到很好的OKCancel按钮,带有文字和图标(可能是特定的外观?)。

但是我想用我自己的Icon添加第三个按钮,所以我明确指定了Object[] options = new Object[] {"OK", "Cancel", <some Icon object>}。 Icon对象看起来很棒,但是现在我有一些丑陋的文本按钮可用于确定和取消。

有没有办法保留“内置”确定和取消按钮,同时还添加我自己的?

1 个答案:

答案 0 :(得分:2)

不使用字符串表示“确定”和“取消”选项,而是使用带图标的JLabel或普通图标。

这是正确的,我通常会深入研究showOptionDialog的源代码,看看它如何设置JOptionPane(毕竟,它只是一种方便的方法),并显示了所需的内容为了达到预期的效果。

这似乎有效:

JPanel panel = new JPanel();
panel.add(new JButton("OK"));
panel.add(new JButton("Cancel"));
panel.add(new JButton("Custom"));

JOptionPane.showOptionDialog(null, "Message", "Title", JOptionPane.DEFAULT_OPTION,
  JOptionPane.INFORMATION_MESSAGE, null, new Object[] { panel }, null);

当然我没有为这个测试添加图标(我只是从main运行它,所以没有父组件);将它们添加到按钮是微不足道的。您必须提供自己的ActionListener来设置选择并关闭对话框。

如果你想要股票图标,你必须从UIManager.getIcon(String)获得它们 - 找到它的名字将是更难的部分。我没有在Mac上的库存JOptionPane按钮上看到图标,甚至使用金属主题。