JavaFX TableView를 Scene Builder를 이용하여 data를 추가하고 만들고 사용법에 대해 간단히 소개하려고 한다.
JavaFX에서 fxml로 UI를 만들고 로드해서 TableView에 데이터를 생성하는 방법이 Web에서 테이블을 만들고
tr, td생성 후 데이터를 넣는 방식과는 조금 다르다.
그래서 이번 글에서는 TableView 생성 후 데이터를 가공해서 TableView에 넣는 방법, 그리고 테이블의 컬럼을 colspan, rowspan하는 방법에 대해 알아보려고 한다.
1. TableView column merge
2. TableView 생성 후 데이터 넣기
TableView 컬럼 합치기
fxml과 controller 를 먼저 만들어 준다.
fxml에서 TableView만 만들고 컬럼은 controller에서 만들고 merge 하려고 한다.
fxml에 fx:id 를 tableMerge인 TableView를 만든다.
<TableView fx:id="tableMerge" layoutX="10" layoutY="400" prefHeight="100" prefWidth="900" />
controller에서 initialize 초기화로 테이블의 컬럼을 초기화 한다.
@FXML
private TableView<String> tableMerge;
@Override
public void initialize(URL location, ResourceBundle resources) {
TableColumn<String, String> col1 = new TableColumn<>("no");
TableColumn<String, String> col2 = new TableColumn<>("Name");
TableColumn<String, String> col2-1 = new TableColumn<>("First Name");
TableColumn<String, String> col2-2 = new TableColumn<>("Last Name");
col2.getColumns().addAll(col2-1, col2-2);
tableMerge.getColumns().addAll(col1, col2);
}
TableView 데이터 추가
이번에는 fxml에서 TableView와 column을 만들고 TextField에 값을 입력 후 Button클릭 시 TextField에 있는
값들을 TableView 에 추가하는 코드입니다.
그러려면 fxml 파일에서 UI를 그리고 controller에서 객체 생성 및 데이터를 추가해야 합니다.
name, age, phone 컬럼과 필드를 만들고 버튼에 onAction 을 추가합니다.
AnchorPane에 fx:controller 로 컨트롤러를 지정해줘야 합니다.
<AnchorPane fx:controller="application.TableController">
<TableView fx:id="tableView">
<columns>
<TableColumn text="Name" fx:id="colName" />
<TableColumn text="Age" fx:id="colAge" />
<TableColumn text="Phone" fx:id="colPhone" />
</columns>
</TableView>
<TextField fx:id="nameTxt" />
<TextField fx:id="nameAge" />
<TextField fx:id="namePhone" />
<Button text="add" onAction="#add" />
</AnchorPane>
ObservableList는 User객체를 담아 변경사항이 발생할 때 변경사항을 추적할 수 있도록 하는 목록이다.
FXCollections는 ObservableList를 리턴한다.
initialize에서 테이블을 초기화해 준다.
컬럼의 setCellValueFactory를 사용하였는데 컬럼의 셀을 채울 때 사용하는 메소드인 것 같다. observablevalue인스턴스의 값을
즉시 업데이트하여 화면에 반영할 수 있도록 하는 것 같다.
public class TableController implements Initializable {
@FXML
private TableView<User> tableView;
@FXML
private TableColumn<User, String> colName;
@FXML
private TableColumn<User, Integer> colAge;
@FXML
private TableColumn<User, String> colPhone;
@FXML
private TextField nameTxt;
@FXML
private TextField ageTxt;
@FXML
private TextField phoneTxt;
ObservableList<User> observableList;
@FXML
private void add() {
observableList.add(new User(nameTxt.getText(), Integer.parseInt(ageTxt.getText()), phoneTxt.getText()));
}
@Override
public void initialize(URL location, ResourceBundle resources) {
observableList = FXCollections.observableArrayList();
colName.setCellValeuFactory(new PropertyValueFactory<>("UserName"));
colAge.setCellValueFactory(new PropertyValueFactory<>("UserAge"));
colPhone.setCellValueFactory(new PropertyValueFactory<>("UserPhone"));
tableView.setItems(observableList);
}
}
User 객체를 생성하고 생성자와 getter, setter를 만들어 준다.
주의할 점은 controller에서 초기화 시 컬럼에 PropertyValueFacotry에 사용한 값과 User객체의 변수명과 동일해야 한다.
public class User {
private SimpleStringProperty userName;
private SimpleStringProperty userAge;
private SimpleStringProperty userPhone;
public User(String userName, int age, String userPhone) {
super();
this.userName = new SimpleStringProperty(userName);
this.userAge = new SimpleStringProperty(userAge);
this.userPhone = new SimpleStringProperty(userPhone);
}
public String getUserName() {
return userName.get();
}
public void setUserName(String userName) {
this.userName = new SimpleStringProperty(userName);
}
public int getUserAge() {
return userAgel.get();
}
public void setUserAge(int userAge) {
this.userAge = new SimpleStringProperty(userAge);
}
public String getUserPhone() {
return userPhone.get();
}
public void setUserPhone(String userPhone) {
this.userPhone = new SimpleStringProperty(userPhone);
}
}
'JavaFX' 카테고리의 다른 글
[JavaFX] JavaFX 모든 윈도우 창 닫기 (0) | 2020.03.10 |
---|---|
[JavaFX] JavaFX CSS 사용해서 UI 꾸미기 (0) | 2020.03.06 |
[JavaFX] JavaFX Scene Builder FXML button 사용 (0) | 2020.02.06 |
[JavaFX] Eclipse + JavaFX + Hibernate 연동 (0) | 2020.02.04 |
[JavaFX] JavaFX 기본 설치 과정 및 Scene Builder 설치 (0) | 2020.01.30 |