【发布时间】:2014-09-29 09:47:14
【问题描述】:
我已经实现了一个 JDialog,它与this previous question 中的最佳答案一致。该代码的工作原理与以下事实完全不同:当提供无效输入时,当只需要一个时会出现两个PropertyChangedEvents。这导致了以下 SSCCE 的制定:
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
public class Test{
public Test(){
JOptionPane optionPane = new JOptionPane(null, JOptionPane.OK_CANCEL_OPTION);
final JDialog dialog = new JDialog(new JFrame(), "Test", true);
dialog.setContentPane(optionPane);
optionPane.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (dialog.isVisible() && (e.getSource() == optionPane) && (JOptionPane.VALUE_PROPERTY.equals(prop))){
java.lang.System.out.println("Code Reached");
optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE);
}
}
});
dialog.pack();
dialog.setVisible(true);
}
public static void main(String[] args){
new Test();
}
}
从这个 SSCCE 可以看出,第二个不想要的 PropertyChangedEvent 是由代码行 optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE) 引起的;但是,此代码对于防止在无效输入后锁定窗口是必要的。有没有办法防止JOptionPane.setValue() 导致PropertyChangedEvent,或者确定PropertyChangedEvent 何时由重置JOptionPane 的值引起并防止if 发生?谢谢。
【问题讨论】:
标签: java swing joptionpane jdialog propertychanged