구성 클래스의 변수에 연결된 gui 요소 (내 경우에는 javafx, TextField)에 대한 적절한 업데이트 전략을 찾고 있습니다. 이 규칙은 fullfilled해야 할 :
1) 나는 GUI 요소 (텍스트 필드)를 새로 고침하는 데 필요한 설정 클래스의 변수를 설정하면
2)이 텍스트 필드를 변경하면 설정 클래스의 변수는
를 새로 고침 할 필요가 3) 텍스트 필드 변경으로 인해 구성 클래스의 변수가 변경된 경우에만 조치를 취해야합니다.
4) 구성에서 변수를 변경하면 조치가 취해지기를 원하지 않습니다. 즉, 통지받을 리스너입니다.양방향 바인딩이있는 javafx gui 업데이트 전략
는 다음과 같이 가정합니다
Gui.java
public TextField textField = new TextField();
Config.java
public StringProperty stringProperty = new StringProperty();
stringProperty .addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> arg0, String arg1, String arg2) {
System.out.println("config string changed").
}
});
public void update(){
// now this is causing the problem because the listener
// will know about this set() obviously
stringProperty.set("bad idea");
}
Controller.java
Gui gui = new Gui();
Config config = new Config();
// setup connection between gui element and config
gui.textField.textProperty().bindBidirectional(config.stringProperty);
내가 다시 추가 후 값을 설정하고 전에 ChangeListener를 제거 할 수 있다는 사실을 알고 있지만, 대한 적절한 솔루션이 있다면 제가 궁금하네요 이런 문제.
편집 : 실제로 내가 알아야 할 것은 : 바인딩 (또는) 때문에 set()이 호출 되었기 때문입니다. 이것이 어떻게 든 가능하다면 내 문제가 해결 될 것입니다.
감사합니다.
건배!
을 (3) 조금? 텍스트 입력란 (예 : 각 키 누름 등)에서 텍스트가 변경 될 때마다 또는 사용자가 변경 사항을 "커밋"(예 : Enter 키를 눌러서) 할 때만이 작업을 수행 하시겠습니까? –
나는 모든 변화를 원합니다. 이것은 양방향 바인딩과 잘 호환됩니다. 나의 유일한 관심사는 청취자를 "화나게하는"세트에 관한 것입니다. 업데이트 메서드가 다른 클래스에서 호출 될 수 있음을 명확히하기 위해 코드를 편집했습니다. – blaster