먼저 main의 pane 부분을
Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
위와 같이 바꾸고 primaryStage.setTitle("buttons"); 추가해서 마음에 드는 제목을 설정한다.
위와 같이 디자인 하고 한가지 다른점은 Radio 버튼을 group으로 묶어서 다중 선택을 막는것이다.
ToggleButton : Button, Code - OnAction : toggle, Properties : group
선택 : Button, Code - OnAction : genderSel, hobbySel
남자, 여자 : RadioButton, Code - fx:id : male, female
영화, 게임, 낚시하기 : CheckBox, Code - fx:id : movie, game, fishing
성별, 취미 : Label, Code - fx:id : gender, hobby
위의 공통점을 본다면 보통 값을 읽거나 쓰기 위해선 fx:id라는 이름을 주는것과
함수에 어떠한 기능을 할 지를 설정하기 위한 노드들은 Code에 OnAction으로 설정한다는것.
마지막으로 좌측 하단의 Controller 의 Controller class 설정도 잊지말자
본인이 만든 class 파일을 설정하는 것으로 이름은 각각 다르니 알아서 찾아야함
다음은 Controller에 기능을 구현한 예제이다.
Java에 작성할 때와 같으며 사용하던 클래스 함수 등 역시 사용 가능하다.
package app; import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; public class MainController implements Initializable{ @FXML private Label toggle; // @fxml 어노테이션을 기입하여 FXML의 노드임을 명시 @FXML private Label gender;// FXML에 지정한 fx:id와 철자 하나 틀리지 않고 같이 명시를 해야함 @FXML private Label hobby; // 대소문자도 구분 @FXML private RadioButton male; @FXML private RadioButton female; @FXML private CheckBox movie; @FXML private CheckBox game; @FXML private CheckBox fishing; boolean settxt = false; @Override public void initialize(URL location, ResourceBundle resourceBundle) { System.out.println("FXML Load Complete"); // 이 문구를 꼭 입력하여 오류가 어디서 났는지 판단 기준을 잡자. // FXML을 로딩하고 java를 읽는다. } // 라벨 아래의 버튼, 역시 OnAction에 기입한 글자와 철자하나 틀리지 않고 같이 써야함 public void toggle() { String flag = toggle.getText(); System.out.println("눌렀을 때 상태 : " + flag); // 누를 때 마다 ON|OFF 바꾸기 if(settxt) { toggle.setText("Off"); settxt = false; }else { toggle.setText("On"); settxt = true; } } // 라디오 아래의 버튼 public void genderSel() { if(male.isSelected()) { gender.setText(male.getText()); } if(female.isSelected()) { gender.setText(female.getText()); } } ArrayListlist = new ArrayList (); // 체크박스 아래의 버튼 public void hobbySel() { if(movie.isSelected()) { list.add(movie.getText()); } if(game.isSelected()) { list.add(game.getText()); } if(fishing.isSelected()) { list.add(fishing.getText()); } System.out.println("취미 갯수 : " + list.size() + "개"); for(String selected : list) { System.out.println("선택 항목 : " + selected); } list.clear(); } } //
그리고 Swing이나 awt를 사용하는게 아니기 때문에 자동완성 사용시 주의하여야 한다.
FXLM을 사용하기 때문에 꼭 JavaFx를 사용해야함
JavaFX에서 오류가 나온다면 일단 javaFX를 지정하였는지 Code에 지정한 이름들의 철자를 틀리지 않았는지부터 확인하자.
※ 실행 테스트를 여러번 하거나 여러개의 프로젝트를 테스트 할 때 주의점.
테스트를 하다보면 자꾸 전에 했던 프로젝트가 실행되거나 FXML의 변경사항이 저장이 안되고 실행이 될 때가 있다.
아래와 같이 해결해보자
Eclipse와 Scene Builder는 별개의 프로그램이기 때문에 수정을 했을때 서로 바로바로 적용이 되지않는다.
따로 fxml파일을 한번 열어서 저장(Ctrl + S)를 눌러주면 된다.
이클립스 좌측에서 실행하고자 하는 프로젝트를 우클릭 - Run As - Java Application을 누르면 정상적으로 실행이 된다.
'JavaFX > 01.Node 추가' 카테고리의 다른 글
[JAVA FX]01-06.TableView, StringProperty, cellData (0) | 2018.09.10 |
---|---|
[JAVA FX]01-05.ImageView, FileChooser(윈도우 파일 선택창), ExtensionFilter (0) | 2018.09.10 |
[JAVA FX]01-04.ListView, Observable (0) | 2018.09.10 |
[JAVA FX]01-03.GridPane, ComboBox, 입력값 읽기 (0) | 2018.09.10 |
[JAVA FX]01-01.기본, 버튼 생성 (0) | 2018.09.07 |