Button ID추가 및 버튼 이벤트 호출 방법
JavaFX에서 scene builder xml로 만든 UI를 javafx에서 사용하기
javafx에서 버튼을 생성하는 방법은 총 세가지가 있는 듯 하다
첫째, javafx에서 Button객체를 생성하는 방법
둘째, fxml을 FXMLLoader로 로드해서 Button을 컨트롤 하는 방법
셋째, fxml을 FXMLLoader로 로드해서 javafx에서 생성한 객체를 추가하는 방법
javafx에서 Button객체를 직접 생성하고 추가하는 방법
BorderPane 에 Button객체를 추가해서 scene에 올린다.
@Override
public void start(Stage primaryStage) {
try{
BorderPane pane = new BorderPane();
pane.setTop(new Button("btn"));
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
fxml을 FXMLLoader로 로드해서 Button 이벤트를 호출하는 방법
fxml파일에 button을 만들어 준 다음 button에 fx:id 값과 onAction="" 값을 넣어준다.
AnchorPane에 fx:controller 값은 fxml을 컨트롤 할 class객체를 지정해 준다. Main 화면에 호출은 하지만 따로 controller클래스 파일을 만들어서 사용할 수도 있다.
<AnchorPane fx:controller="application.Main" prefHeight="200" prefWidth="200">
<Button fx:id="btn" onAction="#clickEvt" layoutX="43" layoutY="80" prefHeight="30" prefWidth="100" text="off" />
</AnchorPane>
fxml 객체를 컨트롤 하려면 @FXML 어노테이션으로 Button 객체를 만들어줘야 한다.
여기서 주의할 점은 fxml의 fx:id값과 명칭을 똑같이 맞춰줘야 한다.
fx:id="btn" == @FXML private button btn; // btn의 이름을 똑같이 맞춰줘야 error가 발생하지 않는다.
이벤트도 @FXML어노테이션을 사용하여 사용한다.
여기서도 fxml의 onAction 값과 똑같이 해줘야 한다.
public class Main extends Application {
@FXML
private Button btn;
@FXML
public void clickEvt() {
System.out.println("click on event");
btn.setText("off");
}
}
fxml파일을 scene에 로드하는 방법
FXMLLoader로 fxml파일을 로드한후 스테이지에 올려준다.
@Override
public void start(Stage primaryStage) {
try{
Parent root = FXMLLoader.load(getClass().getResource("buttonTest.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
fxml을 FXMLLoader로 로드해서 javafx에서 생성한 객체를 추가하는 방법
FXML 을 initialize 로 초기화 하는 방법으로 fxml에 객체를 추가한다.
fxml 변수를 start 메소드에서 실행하게 되면 에러가 발생하여 initialize에서 초기화로 객체를 생성해서 추가해 줘야 할 것 같다.
아마도 내 생각에는 FXML의 객체들은 @FXML어노테이션을 사용한 메소드나 이벤트를 통해서만 컨트롤이 가능한 것 같은데 정확히는 모르겠다.
@FXML
private Pane pane;
@FXML
private void initialize() {
Button btn = new Button("버튼");
pane.getChildren().add(btn);
}
@Override
public void start(Stage primaryStage) {
Parent root = FXMLLoader.load(getClass().getResource("button.fxml");
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
버튼 이벤트 호출 방법
JavaFX에서는 컨트롤러가 이벤트를 직접 처리하지 않고 이벤트 발생 시 이벤트 핸들러에게 이벤트 처리를 위임하는 위임방식을 사용한다.
Button 이벤트가 발생 시 ActionEvent 가 발생하고 Button에 등록된 EventHandler 가 이 이벤트를 처리하는 순서이다.
initialize에서 객체를 만들고 setOnAction이벤트를 추가하였다.
btn 버튼을 사용자가 클릭하면 ActionEvent 가 발생하고 handler에서 이벤트를 처리한다.
@FXML
private void initialize() {
Button btn = new Button("버튼");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("JavaFX Button Event");
}
}
}
FXMLFXML
'JavaFX' 카테고리의 다른 글
[JavaFX] JavaFX 모든 윈도우 창 닫기 (0) | 2020.03.10 |
---|---|
[JavaFX] JavaFX CSS 사용해서 UI 꾸미기 (0) | 2020.03.06 |
[JavaFX] JavaFX TableView Data 추가 TableView 컬럼 합치기 (0) | 2020.02.14 |
[JavaFX] Eclipse + JavaFX + Hibernate 연동 (0) | 2020.02.04 |
[JavaFX] JavaFX 기본 설치 과정 및 Scene Builder 설치 (0) | 2020.01.30 |