이번에는 BorderPane을 그대로 사용합니다.
BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("main.fxml"));
primaryStage.setTitle("주소록 작성");
실행 시 창 크기의 가로를 조금 늘려주겠습니다.
primaryStage.setWidth(615);
![](https://t1.daumcdn.net/cfile/tistory/994C59475B95D11A0D)
BorderPane을 지우지 않고 그대로 사용하겠습니다.
Library에 Pane을 검색하여 좌측 아래의 Hierarchy Border의 Top부분에 끌어다 놓고 안에 TextField 4가지, Button 2가지
TableView는 Center에 끌어다가 배치합니다.
TableColumn은 아래와 같이 추가합니다.
![](https://t1.daumcdn.net/cfile/tistory/99105F4F5B95D26935)
컬럼 이름에 오른쪽 클릭해서 Copy & Paste, Duplicate 둘 중 마음에 드는걸 사용.
Pane : Layout : Pref Width : 600, Pref Wifth : 80
TextField : Properties : Prompt Text - 이름
Code : fx:id - nameField
TextField : Properties : Prompt Text - 주소
Code : fx:id - addrField
TextField : Properties : Prompt Text - 폰번호
Code : fx:id - phoneField
TextField : Properties : Prompt Text - 이메일
Code : fx:id - mailField
Button : Properties : Prompt Text - 등록
Code : fx:id - regist
Button : Properties : Prompt Text - 초기화
Code : fx:id - init
TableView : Code : fx:id - table
TableColumn : Properties : Prompt Text - Name
Code : fx:id - name
TableColumn : Properties : Prompt Text - Address
Code : fx:id - address
TableColumn : Properties : Prompt Text - Phone
Code : fx:id - phone
TableColumn : Properties : Prompt Text - E-mail
Code : fx:id - email
package app;
import java.net.URL;
import java.util.ResourceBundle;
import app.model.TableRowModel;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
public class MainController implements Initializable {
// 필드
@FXML private TextField nameField;
@FXML private TextField addrField;
@FXML private TextField phoneField;
@FXML private TextField mailField;
// 테이블&컬럼
@FXML private TableView<TableRowModel> table;
@FXML private TableColumn<TableRowModel, String> name;
@FXML private TableColumn<TableRowModel, String> address;
@FXML private TableColumn<TableRowModel, String> phone;
@FXML private TableColumn<TableRowModel, String> email;
ObservableList<TableRowModel> list = null;
@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println("FXML Load Complete");
list = FXCollections.observableArrayList();
// Model 객체가 list에 추가
// lee, seoul, 010-1234-5678, email
list.add(new TableRowModel("lee", "seoul", "no phone", "email"));
// 각 필드를 CellData 인터페이스에
name.setCellValueFactory(cellData -> cellData.getValue().getName());
address.setCellValueFactory(cellData -> cellData.getValue().getAddress());
phone.setCellValueFactory(cellData -> cellData.getValue().getPhone());
email.setCellValueFactory(cellData -> cellData.getValue().getEmail());
table.setItems(list);
}
public void regist() {
list.add(new TableRowModel(nameField.getText(), addrField.getText(), phoneField.getText(), mailField.getText()));
name.setCellValueFactory(cellData -> cellData.getValue().getName());
address.setCellValueFactory(cellData -> cellData.getValue().getAddress());
phone.setCellValueFactory(cellData -> cellData.getValue().getPhone());
email.setCellValueFactory(cellData -> cellData.getValue().getEmail());
// setItems는 자동으로 감지됨
// 사용자 편의성을 위해 초기화
nameField.setText("");
addrField.setText("");
phoneField.setText("");
mailField.setText("");
// 리스트의 모든 값 출력 하기
// TableRowModel을 새로 list를 넣어 향상된 for문으로 출력
for(TableRowModel model : list) {
System.out.println(
model.getName().get()+" | "+
model.getAddress().get()+" | "+
model.getPhone().get()+" | "+
model.getEmail().get()
);
}
}
public void init() {
list.clear();
// 리스트를 직접 핸들링 한 경우는 이 부분이 필요
table.setItems(list);
}
}
package app.model;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class TableRowModel {
private StringProperty name;
private StringProperty address;
private StringProperty phone;
private StringProperty email;
// 생성자 (Alt + Shift + S 로 쉽게 등록(Constructor))
public TableRowModel(String name, String address, String phone, String email) {
this.name = new SimpleStringProperty(name);
this.address = new SimpleStringProperty(address);
this.phone = new SimpleStringProperty(phone);
this.email = new SimpleStringProperty(email);
}
// 게터세터 (Alt + Shift + S 로 쉽게 등록)
public StringProperty getName() {
return name;
}
public void setName(StringProperty name) {
this.name = name;
}
public StringProperty getAddress() {
return address;
}
public void setAddress(StringProperty address) {
this.address = address;
}
public StringProperty getPhone() {
return phone;
}
public void setPhone(StringProperty phone) {
this.phone = phone;
}
public StringProperty getEmail() {
return email;
}
public void setEmail(StringProperty email) {
this.email = email;
}
}