- 1 -
Main은 따로 변경할 사항이 없다.
BorderPane - Center에 Pane 추가
Pane위에 위와같이
Label (fx:id - label)
Slider (fx:id - slider)
TextArea (fx:id - area1)
TextArea (fx:id - area2)
Controller class 설정, 저장 후 코드
슬라이더의 콩을 움직일 때 글자의 크기도 바로바로 늘어나고
텍스트 area 1, 2의 글자가 동시에 입력되게끔
package app;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.binding.Bindings;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TextArea;
import javafx.scene.text.Font;
public class MainController implements Initializable{
@FXML private Label label;
@FXML private Slider slider;
@FXML private TextArea area1;
@FXML private TextArea area2;
@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println("FXML Load Complete");
// 실시간 감시, 값을 확인
// 슬라이더 변경시 값을 확인
// 아래는 그대로 쓰되 대부분 자동생성
slider.setValue(12); // 글자 기본값 12랑 맞춰주기
slider.valueProperty().addListener(new ChangeListener<Number>() {
// 스스로를 감시하여 값이 변경 될 때마다 특정 이벤트 발생
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
label.setFont(new Font(newValue.doubleValue()));
}
});
/*
* 단방향 바인딩
* 대상1에 변경된 내용을 대상 2에 적용
* 대상2.xxxProperty().bind(대상1.XXXProperty))
* 양방향 바인딩
* 대상2. xxxProperty().bindBidrictional(대상1.xxxProperty)
*/
Bindings.bindBidirectional(area1.textProperty(), area2.textProperty());
}
}
- 2 -
Main의 Scene scene = new Scene(root,200,200); 부분에 숫자를 200, 200로 하여 창 크기를 줄이고
Border의 Center에 Pane을 올리고
Pane 위에 Slider와 Text Field를 올린다.
Slider - fx:id : slider
TextField - fx:id : field
그리고 Controller class를 설정 후 코딩
이 프로그램은 슬라이더를 움직이면 그에 알맞은 텍스트가 출력되는 프로그램
Bindings를 통해서 하나로 묶는것
package app;
import java.net.URL;
import java.text.NumberFormat;
import java.util.ResourceBundle;
import javafx.beans.binding.Bindings;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
public class MainController implements Initializable {
@FXML private Slider slider;
@FXML private TextField field;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
System.out.println("FXML Load Complete");
slider.setValue(50);
// field.setText("50");
field.setText(new Double(50).toString());
Bindings.bindBidirectional(field.textProperty(), slider.valueProperty(), NumberFormat.getNumberInstance());
// field, slider를 인자로 받음
}
}
'JavaFX > 01.Node 추가' 카테고리의 다른 글
| [JAVA FX]01-11.PieChart (0) | 2018.09.11 |
|---|---|
| [JAVA FX]01-10.Progress Bar, Progress Indicator, Thread (0) | 2018.09.11 |
| [JAVA FX]01-08.Menu 바 추가 (0) | 2018.09.10 |
| [JAVA FX]01-07.TreeView (0) | 2018.09.10 |
| [JAVA FX]01-06.TableView, StringProperty, cellData (0) | 2018.09.10 |