this previous question에 표시된 맨 위로 대답의 줄을 따라 JDialog를 구현했습니다. 이 코드는 유효하지 않은 입력이 제공 될 때 하나만 원할 때 두 개의 PropertyChangedEvents
이 발생한다는 사실을 제외하면 완전히 작동합니다. 이것은 아래 SSCCE 제형되었다 :JDialog 속성이 변경된 동작
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에서, 제 2, 및 원치 않는 PropertyChangedEvent
코드 optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE)
의 라인에 의해 발생되는 것을 알 수있다; 그러나이 코드는 잘못된 입력 후에 창 잠금을 방지하는 데 필요합니다. JOptionPane.setValue()
이 PropertyChangedEvent
을 발생시키지 못하게하거나 PropertyChangedEvent
이 JOptionPane의 값을 재설정하여 야기 된 것을 확인하고 if
이 발생하지 않도록하는 방법이 있습니까? 감사.
현재 부울을 토글하는 A와 비슷한 해결 방법을 사용하고 있습니다. 그러나 이것은 약간의 dodgy 솔루션처럼 보입니다. 유감스럽게도 JDialog를 유효한 입력이 제공 될 때까지 (또는 제공된 SSCCE의 경우에는 무한대로 유지해야 함) JDialog를 화면에 유지하고 클릭 할 수있게하려는 경우 리스너를 제거 할 수 없습니다. – Hungry
편집이 완벽합니다. , 나는 그것을 보지 못했다고 나는 믿을 수 없다! – Hungry