Rucrazia's Blog

JAVAFX 3. TABLE with Tableview 본문

기술 - Coding/Java

JAVAFX 3. TABLE with Tableview

DoyoungJ 2017. 6. 15. 20:14

TABLEVIEW



table.setEditable(true);
TableColumn<Person, ImageView> additionalCol = new TableColumn<Person, ImageView>("썸네일");
additionalCol.setCellValueFactory(new PropertyValueFactory<Person, ImageView>("image"));
TableColumn countNumber = new TableColumn("이름");
countNumber.setCellValueFactory( new PropertyValueFactory<Person, String>("name"));
TableColumn exposureYear = new TableColumn("번호");
exposureYear.setCellValueFactory( new PropertyValueFactory<Person, String>("number"));
TableColumn exposureType = new TableColumn("연령");
exposureType.setCellValueFactory( new PropertyValueFactory<Person, String>("year"));
TableColumn exposureDose = new TableColumn("이메일주소");
exposureDose.setCellValueFactory( new PropertyValueFactory<Person, String>("email"));
TableColumn radiationType = new TableColumn("성별");
radiationType.setCellValueFactory( new PropertyValueFactory<Person, String>("sex"));

table.setItems(data);
table.getColumns().addAll(additionalCol, name, number, year, email, sex);

table.setEditable(true); 로 tableview 입력을 enable하고,


TableColumn countNumber = new TableColumn("이름"); 테이블의 컬럼변수를 생성하고 이름을 정해준다.

countNumber.setCellValueFactory( new PropertyValueFactory<Person, String>("name"));

Person이라는 클래스에, String 값인 name에 해당하는 값을 가져온다.








TABLE VIEW CELL 선택


data.remove 함수를 쓰게 되면Listener 때문인지, Override 때문인지 thread가 두개가 동시에 실행됩니다.

그래서 행이 두개가 동시에 삭제 되며 에러를 발생하게 되는데, 임시방편으로

final boolean[] cancelError = {false};

플래그를 생성해서 강제적으로 막아줬습니다.


table.getSelectionModel().setCellSelectionEnabled(true);
final ObservableList<TablePosition> selectedCells = table.getSelectionModel().getSelectedCells();
final boolean[] cancelError = {false};
selectedCells.addListener(new ListChangeListener<TablePosition>() {

@Override
public void onChanged(Change change) {

for (TablePosition pos : selectedCells) {
if (pos.getColumn() == 0) {
System.out.println("Single Page flag :: ");
if(cancelError[0] == false) {

cancelError[0] = true;
System.out.println("Cell selected in row " + pos.getRow() + " and column " + pos.getColumn());
data.remove(pos.getRow());
table.getSelectionModel().clearSelection();
table.refresh();

}
}
}
cancelError[0] = false;
}});