2014-05-24 11 views
1

я получил следующий код JavaJOptionPane.showOptionDialog возвращает неправильное значение?

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 с кнопками значок. Проблема заключается в том, что хотя и диалог и кнопки кнопок ift отображаются правильно, всякий раз, когда нажимаются кнопки. Nothign бывает, и инструкция println не выполняется ... пока я не нажму на X, чтобы закрыть диалоговое окно, и независимо от того, что я нажал прежде чем .. в качестве результата напечатано 1. Как ни странно, если я изменяю массив параметров на обычный (только текст), который появляется в коде, он ведет себя так, как можно было бы ожидать возвращения индекса на основе 0 выбранного параметра. Какие-нибудь намеки на то, что здесь может быть неправильно? заранее спасибо

+0

Извините, попробуйте передать сами иконки - обратите внимание на себя, набрав на ipad sucks – MadProgrammer

+0

@MadProgrammer, точно так же, как я пытаюсь ввести без ношения моих очков :) – camickr

ответ

1

Это работает, если вы просто передать иконки, опция панель будет создавать кнопки для вас:

Object[] options = {icoR, icoI}; 

Так что я думаю, если вы передаете кнопки он предполагает, что вы будете обрабатывать закрытие панели параметров самостоятельно.

В качестве работы вы можете использовать класс Compound Icon для создания значка, содержащего текст и изображение.

Возможно, вы также захотите использовать Text Icon, который вы также можете найти по приведенной выше ссылке. При создании TextIcon вам, вероятно, нужно использовать:

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

установить шрифт TextIcon, чтобы быть таким же, как кнопка.

+0

Я вижу, что когда объекты опций являются компонентами, тогда это должно работайте, как ожидалось. Почему мы должны передавать значки? Не могли бы вы объяснить? – Keerthivasan

+1

'Я вижу, что когда объекты опций являются компонентами, тогда он должен работать как ожидалось.' - API просто говорит, что они отображаются правильно. Он не говорит, что если вы используете кнопку, ActionListener будет автоматически добавлен к кнопке. Я просто предлагаю альтернативу. – camickr

+0

Отлично, я могу получить его сейчас. Благодаря! – Keerthivasan

Смежные вопросы