JavaFX 도구를 사용하여 Reactive 시스템 구축

4425 단어 JavaFXReactive
JavaFX는 Java에서 그래픽 응용 프로그램을 구축하는 데 사용되는 새로운 표준 라이브러리이지만, 많은 프로그래머들이 여전히 스윙, 심지어 AWT를 사용하고 있다.JavaFX 도구가 집약된 새로운 하이퍼루프 기능을 이용하여 응답식 빠른 응용 프로그램을 구축하는 방법에 대한 조언이 있습니다!
1. 속성 값
자바FX 구성 요소에 대해 완전히 알고 있다면, 이동은 속성(Property)이라는 것을 만났습니다.FX 라이브러리의 거의 모든 값은 구역(divider)의 너비, 그림의 크기, 텍스트 표지(label)의 문자, 목록의 하위 항목과 체크 상자(checkbox)의 상태를 관찰할 수 있다.속성은 쓰기 가능 속성과 읽기 가능 속성으로 나뉜다.쓰기 가능 값은 수정하거나 설정기 방법을 사용하거나 직접 수정할 수 있습니다.JavaFX는 이벤트 처리 프로세스를 처리하고 이 속성에 의존하는 모든 구성 요소가 통지될 수 있도록 합니다.읽을 수 있는 속성은 값이 수정되었을 때 알림을 받을 수 있는 방법을 가지고 있습니다.
예:

//  - 
StringProperty name = new SimpleStringProperty("Emil"); 
//  
ObservableBooleanValue nameIsEmpty = name.isEmpty();
2. 바인딩 값
쓸 수 있고 읽을 수 있는 값을 가지고 있을 때, 이 값들이 어떻게 규칙을 정의하는지 시작할 수 있다.쓰기 가능한 속성은 읽을 수 있는 속성에 귀속될 수 있으며, 그 값은 항상 읽을 수 있는 이것과 일치합니다.귀속은 즉각 일어나지 않지만, 값이 관찰되기 전에 진행될 것이다.귀속은 단방향 또는 양방향일 수 있습니다.물론 그것들 사이가 양방향이라면 두 가지 속성이 모두 쓸 수 있어야 한다.
예:

TextField fieldA = new TextField();
TextField fieldB = new TextField();
fieldA.prefWidthProperty().bind(fieldB.widthProperty());
3. 관찰 가능한 목록
속성은 유일하게 관찰될 수 있는 것이 아니다.만약 목록이 Observable List에 봉인되었다면, 목록의 구성원 역시 관찰될 수 있습니다.ObservableList의 응답 모델은 상당히 선진적이다.너는 목록이 수정되었을 때 통지를 받을 수 있을 뿐만 아니라, 목록이 구체적으로 어떻게 수정되었는지도 볼 수 있다.
예:

List<String> otherList = Arrays.asList("foo", "bar", "bar");
ObservableList<String> list = FXCollections.observableList(otherList);

list.addListener((ListChangeListener.Change<? extends String> change) -> {
  System.out.println("Received event.");
  while (change.next()) {
    if (change.wasAdded()) {
      System.out.println(
        "Items " + change.getAddedSubList() + " was added.");
    }

    if (change.wasRemoved()) {
      System.out.println(
        "Items " + change.getRemoved() + " was removed.");
    }
  }
});

System.out.println("Old list: " + list);
list.set(1, "foo");
System.out.println("New list: " + list);
위 코드의 실행 출력은 다음과 같습니다.

Old list: [foo, bar, bar]
Received event.
Items [foo] was added.
Items [bar] was removed.
New list: [foo, foo, bar]
보시다시피 설정 작업은 이벤트를 한 번만 촉발할 수 있습니다.
4. StringConverter
때때로 귀속을 만들 때 구성 요소의 값을 추출할 필요가 없다는 것을 발견할 수 있습니다.이 전형적인 예는 텍스트 필드 (TextField) 에서 path가 있는 StringProperty를 얻었다는 것이다.Path를 나타내는 이 값이 있는 관찰 가능한 속성을 원한다면, String Converter를 만들어야 합니다.
예:

TextField fileLocation = new TextField();
StringProperty location = fileLocation.textProperty();
Property<Path> path = new SimpleObjectProperty<>();
 
Bindings.bindBidirectional(location, path, new StringConverter<Path>() {
  @Override
  public String toString(Path path) {
    return path.toString();
  }
 
  @Override
  public Path fromString(String string) {
    return Paths.get(string);
  }
});
대상 속성은 텍스트 필드의 값과 양방향으로 연결된 것이 아닙니다.
5. Expressions
상술한 Bindings 클래스를 사용하면 어떤 형식의 표현식을 만들 수 있습니다.예를 들어 사용자가 정보를 입력할 수 있는 두 개의 텍스트 필드가 있다.현재 읽기 전용 도메인을 정의하려면 문자열이 항상 포함되어 있으며, 두 열의 길이가 같으면 두 개의 문자열이 한 글자씩 섞여 표시됩니다.길이가 같지 않으면 도움말 메시지가 표시됩니다.
예:

TextField first = new TextField();
TextField second = new TextField();
TextField mix  = new TextField();
 
mix.textProperty().bind(
  Bindings.when(
    first.lengthProperty().isEqualTo(second.lengthProperty())
  ).then(Bindings.createStringBinding(
    () -> {
      int length    = first.lengthProperty().get();
      String firstText = first.textProperty().get();
      String secondText = second.textProperty().get();
      char[] result   = new char[length * 2];
 
      for (int i = 0; i < length; i++) {
        result[i * 2]   = firstText.charAt(i);
        result[i * 2 + 1] = secondText.charAt(i);
      }
 
      return new String(result);
    }, 
    first.textProperty(),
    second.textProperty()
  )).otherwise("Please enter two strings of exactly the same length.")
);
여기에는 JavaFX의 여러 가지 특성 중 하나일 뿐입니다.이 사건 시스템을 이용하는 창조적인 방식을 더 많이 찾을 수 있기를 바랍니다!

좋은 웹페이지 즐겨찾기