JOptionPane.showOptionDialog返回错误的值?

时间:2014-05-24 04:35:44

标签: java swing

我得到以下java代码

 Icon icoR = new ImageIcon("src/resources/Republica.png");
 Icon icoI = new ImageIcon("src/resources/Imperio.png");
 JButton botRep = new JButton("Jedi", icoR);
 JButton botImp = new JButton("Sith", icoI);
 Object[] options = {botRep, botImp};
 //Object[] options = {"Jedi","Sith"};
 int i = JOptionPane.showOptionDialog(
     null,
     "Question","Title",
     JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE,
     null,options,options[0]);
 System.out.println(i);

并尝试使用图标按钮从optionDialog中检索所选值。问题是,只要单击按钮,就可以正确显示对话框和按钮本身.. nothign发生,并且println语句没有执行...直到我点击X关闭对话框,无论我点击了什么之前..结果打印1。奇怪的是,如果我将options数组更改为在代码中出现注释的常规(仅文本),则对话框的行为与预期返回所选选项的从0开始的索引一样。关于这里可能出错的任何提示? 提前谢谢

1 个答案:

答案 0 :(得分:1)

如果您只是传递图标,选项窗格将为您创建按钮:

Object[] options = {icoR, icoI};

所以我想如果你通过按钮,它会假定你将自己处理选项窗格的关闭。

作为一种解决方法,您可以使用Compound Icon类创建包含文本和图像的图标。

您可能还想使用Text Icon,您也可以从上面的链接中找到它。创建TextIcon时,您可能需要使用:

setFont( UIManager.getFont("Button.font") );

TextIcon的字体设置为与按钮相同。