먼저 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());
		}
	}
	
	ArrayList list = 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을 누르면 정상적으로 실행이 된다.




+ Recent posts