본문 바로가기

JavaFX

[JavaFX] TreeTableView, JFXTableView 만들고 데이터 저장하기

JFXTableView, TreeTableView 만들기

 

기본 TreeTableView 사용법

최상위 root로 TreeItem rootTitle 을 생성

subTitle1을 생성하고 그 밑으로 Sub1_1, Sub1_2을 add 한다.

같은 방법으로 subTitle2를 생성한다.

 

최상위 rootTitle에 subTitle1과 subTitle2를 add 한다.

 

TreeView를 생성하고 최상위 rootTitle을 set한다.

treeView.setShowRoot(false) 로 최상위 rootTitle을 숨긴다.

 

> root ( 숨김처리 )

  > Sub1

     Sub1_1

     Sub1_2

  > Sub2

     Sub2_1

     Sub2_2

 

TreeItem rootTitle = new TreeItem("root");

TreeItem subTitle1 = new TreeItem("Sub1");
subTitle1.getChildren().add(new TreeItem("Sub1_1"));
subTitle1.getChildren().add(new TreeItem("Sub1_2"));
rootTitle.getChildren().add(subTitle1);

TreeItem subTitle2 = new TreeItem("Sub2");
subTitle2.getChildren().add(new TreeItem("Sub2_1"));
subTitle2.getChildren().add(new TreeItem("Sub2_2"));
rootTitle.getChildren().add(subTitle1);

TreeTableView treeView = new TreeTableView();
treeView.setRoot(rootTitle);
treeView.setShowRoot(false);

 

 

 

JFXTreeTableView 와 JFXTreeTableColumn 을 사용하여 동적 Tree 만들기

 

<AnchorPane>
  <chileren>
    <JFXTreeTableView fx:id="jfxTree" >
      
    </JFXTreeTableView>
  </children>
</AnchorPane>

@FXML private JFXTreeTableView jfxTree;
@FXML private JFXTreeTableColumn<UserVO, String> col1, col2, col3;

public tableSetting(){
  List<UserVO> userList = service.getUserList();

  col1 = new JFXTreeTableColumn<>("id");
  col2 = new JFXTreeTableColumn<>("name");
  col3 = new JFXTreeTableColumn<>("age");
  
  col1.setCellValueFactory(new TreeItemPropertyValueFactory<UserVO, String>("id"));
  col2.setCellValueFactory(new TreeItemPropertyValueFactory<UserVO, String>("name"));
  col3.setCellValueFactory(new TreeItemPropertyValueFactory<UserVO, String>("age"));
  
  col1.prefWidthProperty().bind(jfxTree.widthProperty().divide(3));
  col2.prefWidthProperty().bind(jfxTree.widthProperty().divide(3));
  col3.prefWidthProperty().bind(jfxTree.widthProperty().divide(3));
  
  TreeItem<UserVO> rootItem = new TreeItem<UserVO>();
  
  Map<String, TreeItem<UserVO>> rootMap = new HashMap<String, TreeItem<UserVO>>();
  Map<String, TreeItem<UserVO>> subMap = new HashMap<String, TreeItem<UserVO>>();
  
  for(UserVO user : userList){
    if(!rootMap.containsKey(user.getUserId()))) {
      TreeItem<UserVO> root = new TreeItem<UserVO>();
      root.setValue(user);
      rootMap.put(user.getUserId(), root);
    } else {
      TreeItem<UserVO> sub = new TreeItem<UserVO>();
      sub.setValue(user);
      subMap.put(user.getUserId() + user.getName(), user);
    }
  }
  
  rootMap.entrySet().forEach((rt) -> {
    subMap.entrySet().forEach(sb) -> {
      if(sb.getValue().getValue().getUserId().equals(rt.getValue().getValue().getUserId())){
        rt.getValue().getChildren().addAll(sb.getValue());
      }
    });
    
    rootItem.getChildren().add(rt.getValue());
  });
  
  jfxTree.setRoot(rootItem);
  jfxTree.setShowRoot(false);
}