Olá pessoal, tenho essa seguinte classe que funciona perfeitamente quando não acompanhada de outros componentes swing.
[code]public class MyJOptionPane extends JDialog {
private ActionSim actionSim = null;
private ActionNao actionNao = null;
private static boolean resposta;
private MyJOptionPane() {
String keySim = “actionKeySim”;
String keyNao = “actionKeyNao”;
actionSim = new ActionSim();
actionNao = new ActionNao();
KeyStroke strokeSim = KeyStroke.getKeyStroke("S");
KeyStroke strokeNao = KeyStroke.getKeyStroke("N");
InputMap inputMap = this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(strokeSim, keySim);
inputMap.put(strokeNao, keyNao);
ActionMap actionMap = this.getRootPane().getActionMap();
actionMap.put(keySim, actionSim);
actionMap.put(keyNao, actionNao);
JButton botoes[] = {new JButton(actionSim), new JButton(actionNao)};
botoes[0].setText("Sim-(S)");
botoes[1].setText("Não-(N)");
add(new JOptionPane("Mensagem", JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION, null, botoes, null));
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
pack();
setResizable(false);
setVisible(true);
}
class ActionSim extends AbstractAction {
public void actionPerformed(ActionEvent e) {
resposta = true;
dispose();
}
}
class ActionNao extends AbstractAction {
public void actionPerformed(ActionEvent e) {
resposta = false;
dispose();
}
}
public static boolean valor(){
MyJOptionPane myJOptionPane = new MyJOptionPane();
while(myJOptionPane.isVisible()){}
return resposta;
}
} [/code]
Acontece que quando eu uso essa classe junto com um jframe, por exemplo, toda a interface gráfica trava sendo necessário reiniciar a jvm.
Descobrir que isso acontece por conta do último while só que ao retirar-lo o método retorna false instantaneamente.
Então oq fazer nesse caso? Como posso esperar por uma ação seja feita antes de enviar a resposta sem que minha interface trave?