JavaFX 도구를 사용하여 Reactive 시스템 구축
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의 여러 가지 특성 중 하나일 뿐입니다.이 사건 시스템을 이용하는 창조적인 방식을 더 많이 찾을 수 있기를 바랍니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Eclipse에서 javaFX 도입 (2020-4 월)javaSE에 javaFX가 동봉되지 않게 되어, 기존의 방법으로는 잘 되지 않는 것이 있는 것 같고, 도입에 망설였으므로 나중의 참고가 된다고 생각. 초보자이므로 손 부드럽게. macOS Catalina Eclip...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.