0

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

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

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

4

1 回答 1

2

不要将字符串用于“确定”和“取消”选项,而是使用带有图标或普通图标的 JLabels。

正是在这里,我通常会深入研究它的源代码,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,所以没有父组件);将它们添加到按钮是微不足道的。您必须提供自己的ActionListeners 来设置选择并关闭对话框。

如果您想要股票图标,则必须从中获取它们UIManager.getIcon(String)- 找到它的名称将是更难的部分。我在 Mac 上的 JOptionPane 按钮上看不到图标,即使使用 Metal 主题也是如此。

于 2013-10-01T19:41:16.707 回答