티스토리 뷰
TableView에 동적으로 데이터 추가 하기
이번 시간에는 TableView의 응용으로 간단하게 TextField에 데이터를 입력하고 TableView에 데이터를 추가하는 방법에 대해서 알아보도록 하겠습니다. TableView의 사용법은 TableView 사용법 을 참고하시면 됩니다.
이번시간에 만들어 볼 것은 TableView아래에 TextField가 있어서 데이터를 입력하고 버튼을 누르면 바로 테이블 뷰에 Row 하나가 추가되는 프로그램을 만들어 볼 것 입니다. 시작해보죠.
■ UI
UI는 이전에 만든 TableView를 사용하겠습니다. 그리고 그 아래에다가 간단하게 HBox로 TextField와 Button을 생성해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <VBox fx:controller="sample.tableview.Controller" stylesheets="@tableview.css" xmlns:fx="http://javafx.com/fxml" alignment="center"> <padding> <Insets top="10" right="10" bottom="10" left="10"/> </padding> <TableView fx:id="myTableView"> <columns> <TableColumn text="Name" fx:id="nameColumn" prefWidth="170"/> <TableColumn text="Address" fx:id="addressColumn" prefWidth="170"/> <TableColumn text="Gender" fx:id="genderColumn" prefWidth="170"/> <TableColumn text="Class" fx:id="classColumn" prefWidth="170"/> </columns> </TableView> <HBox> <TextField promptText="Name" prefWidth="140" fx:id="nameField"> <HBox.margin> <Insets right="6"/> </HBox.margin> </TextField> <TextField promptText="Address" prefWidth="140" fx:id="addressField"> <HBox.margin> <Insets right="6"/> </HBox.margin> </TextField> <TextField promptText="Gender" prefWidth="140" fx:id="genderField"> <HBox.margin> <Insets right="6"/> </HBox.margin> </TextField> <TextField promptText="ClassNumber" prefWidth="140" fx:id="classField"> <HBox.margin> <Insets right="6"/> </HBox.margin> </TextField> <Button text="Add" prefWidth="80" prefHeight="30" fx:id="addButton"/> <VBox.margin> <Insets top="6"/> </VBox.margin> </HBox> </VBox> | cs |
ID도 붙여줍니다. 그럼 아래와 같은 UI를 보실 수 있습니다.
■ Controller
이전 포스트를 참고하기 귀찮을 테니 전체 코드를 보여드리겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | public class Controller implements Initializable { @FXML private TableView<TableRowDataModel> myTableView; @FXML private TableColumn<TableRowDataModel, String> nameColumn; @FXML private TableColumn<TableRowDataModel, String> addressColumn; @FXML private TableColumn<TableRowDataModel, String> genderColumn; @FXML private TableColumn<TableRowDataModel, Integer> classColumn; @FXML private TextField nameField; @FXML private TextField addressField; @FXML private TextField genderField; @FXML private TextField classField; @FXML private Button addButton; ObservableList<TableRowDataModel> myList = FXCollections.observableArrayList( new TableRowDataModel(new SimpleStringProperty("Jin Seong"), new SimpleStringProperty("DaeJeon"), new SimpleStringProperty("male"), new SimpleIntegerProperty(3)), new TableRowDataModel(new SimpleStringProperty("Jang Ho"), new SimpleStringProperty("SiGol"), new SimpleStringProperty("male"), new SimpleIntegerProperty(3)), new TableRowDataModel(new SimpleStringProperty("Sung Bin"), new SimpleStringProperty("SuWon"), new SimpleStringProperty("male"), new SimpleIntegerProperty(3)), new TableRowDataModel(new SimpleStringProperty("Key Hwang"), new SimpleStringProperty("DaeJeon"), new SimpleStringProperty("male"), new SimpleIntegerProperty(3)), new TableRowDataModel(new SimpleStringProperty("Seong Woo"), new SimpleStringProperty("DaeJeon"), new SimpleStringProperty("male"), new SimpleIntegerProperty(3)), new TableRowDataModel(new SimpleStringProperty("I kyun"), new SimpleStringProperty("BuSan"), new SimpleStringProperty("male"), new SimpleIntegerProperty(3)) ); @Override public void initialize(URL location, ResourceBundle resources) { nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty()); addressColumn.setCellValueFactory(cellData -> cellData.getValue().addressProperty()); genderColumn.setCellValueFactory(cellData -> cellData.getValue().genderProperty()); classColumn.setCellValueFactory(cellData -> cellData.getValue().classNumProperty().asObject()); myTableView.setItems(myList); addButton.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { myTableView.getItems().add(new TableRowDataModel(new SimpleStringProperty(nameField.getText()), new SimpleStringProperty(addressField.getText()), new SimpleStringProperty(genderField.getText()), new SimpleIntegerProperty(Integer.parseInt(classField.getText())))); } }); } } | cs |
중요한 부분은 EventHandler 부분입니다. Button 이 눌렀을 때 TextField의 값을 가져와 StringProperty로 RowDataModel 객체로 TableView에 Data를 add 해주는 원리 입니다.
■ 결과 화면
봐주셔서 감사합니다 :)
반응형
'프로그래밍 > JavaFX' 카테고리의 다른 글
[JavaFX] System Clipboard에 Text 복사 (Ctrl + c 시에 내용 복사하기) (0) | 2019.02.13 |
---|---|
[JavaFX] TableView 두번 Select 됬을 때 Select 해제하기(SelectionModel 수정) (2) | 2017.02.28 |
[JavaFX] TableView 이벤트 처리 (0) | 2017.02.23 |
[JavaFX] TableView Header 없애는 방법 (2) | 2017.02.23 |
[JavaFX] Table View 사용법 (3) | 2017.02.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- JavaFX Window Close
- 스프링부트
- 일본 배낭여행
- 이펙티브
- effectivejava
- springboot
- JavaFX Table View
- intelij
- 일본 여행
- 텐트
- 일본여행
- effective java
- git
- java
- 이펙티브자바
- 이펙티브 자바
- 방통대 과제물
- 배낭여행
- 자전거 여행
- JavaFX 테이블뷰
- 자전거
- 인텔리제이
- JavaFX 종료
- JavaFX
- 배낭 여행
- 자바
- windows
- TableView
- 일본 자전거 여행
- Java UI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함