2013-05-30 6 views
1

У меня есть класс, который расширяет JOptionPane. В нем есть метод, который вызывает showConfirmDialog (new JFrame(), (JScrollPane) jp, "Friends List", 2, 0, icon);Изменение значка в JOptionPane

Есть ли способ изменить значок без необходимости звонить showConfirmDialog во второй раз? То есть, основываясь на моем вводе в JOptionPane, можно ли изменить значок без создания нового диалогового окна подтверждения?

+1

Я не совсем понимаю ваш вопрос? Вы хотите изменить значок во время диалога на экране? Кроме того, вы не являетесь «новым JFrame()» в качестве первого параметра, вы можете передать «null», но лучше переустановить компонент, который отображается на экране, если у вас есть один – MadProgrammer

+0

Да, я хочу изменить значок, когда диалог находится на экране. –

+0

По своей природе диалоговые окна 'JOptionPane' блокируются, единственный способ даже попытаться изменить его - это иметь фоновый поток« может »быть в состоянии взаимодействовать с экземпляром' JOptionPane' ... Вы получаете банку червей, я получу консервный нож – MadProgrammer

ответ

4

Как показано here, вы можете добавить JOptionPane в Dialog и выслушать нужное PropertyChangeEvent. Ниже приведен пример между двумя значками UIManager в ответ на нажатие кнопок.

image

JDialog d = new JDialog(); 
d.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
final Icon PENDING = UIManager.getIcon("html.pendingImage"); 
final Icon MISSING = UIManager.getIcon("html.missingImage"); 
final JOptionPane optionPane = new JOptionPane("Click a Button", 
    JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); 
optionPane.addPropertyChangeListener(new PropertyChangeListener() { 
    @Override 
    public void propertyChange(PropertyChangeEvent e) { 
     if (e.getPropertyName().equals(JOptionPane.VALUE_PROPERTY)) { 
      Integer value = (Integer) e.getNewValue(); 
      if (value.intValue() == JOptionPane.YES_OPTION) { 
       optionPane.setIcon(PENDING); 
      } else { 
       optionPane.setIcon(MISSING); 
      } 
     } 
    } 
}); 
d.setContentPane(optionPane); 
d.pack(); 
d.setLocationRelativeTo(null); 
d.setVisible(true); 
+0

Не совсем понял поддержку PropertyChangeListener: P +1 – MadProgrammer

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