2013-04-30 2 views
0

У меня есть это дерево, которое генерирует небольшое дерево с данными.Как обновить сцену, когда я нажимаю на узел дерева

public TitledPane createConnectionsList(String title) { 

     TreeItem<String> rootNode = new TreeItem<>("Connection 1", null); 

     rootNode.setExpanded(true); 
     for (ConnectionData data : connectionDataList) { 
      TreeItem<String> connLeaf = new TreeItem<>(data.getDBGWName()); 
      boolean found = false; 
      for (TreeItem<String> depNode : rootNode.getChildren()) { 
       if (depNode.getValue().contentEquals(data.getTableName())) { 
        depNode.getChildren().add(connLeaf); 
        found = true; 
        break; 
       } 
      } 
      if (!found) { 
       TreeItem<String> depNode = new TreeItem<>(data.getTableName(), null); 
       rootNode.getChildren().add(depNode); 
       depNode.getChildren().add(connLeaf); 
      } 
     } 

     VBox box = new VBox(); 
     final Scene scene = new Scene(box, 700, 600); 
     scene.setFill(Color.LIGHTGRAY); 

     TreeView<String> treeView = new TreeView<>(rootNode); 

     treeView.setShowRoot(true); 
     treeView.setEditable(true); 

     AnchorPane content = new AnchorPane(); 
     // Set aligment - fill the accordion with the three content 

     AnchorPane.setLeftAnchor(treeView, 0d); 
     AnchorPane.setRightAnchor(treeView, 0d); 
     AnchorPane.setBottomAnchor(treeView, 0d); 
     AnchorPane.setTopAnchor(treeView, 0d); 

     content.getChildren().add(treeView); 
     // Add to TitelPane 
     TitledPane pane = new TitledPane(title, content); 
     return pane; 
    } 

public List<ConnectionData> connectionDataList; 

    public static class ConnectionData { 

     private String DBGWName; 
     private String TableName; 

     public ConnectionData(String DBGWName, String TableName) { 

      this.DBGWName = DBGWName; 
      this.TableName = TableName; 

     } 

     public String getDBGWName() { 
      return DBGWName; 
     } 

     public void setDBGWName(String DBGWName) { 
      this.DBGWName = DBGWName; 
     } 

     public String getTableName() { 
      return TableName; 
     } 

     public void setTableName(String TableName) { 
      this.TableName = TableName; 
     } 
    } 

connectionDataList = Arrays.<ConnectionData>asList(
       new ConnectionData("Table 1", "DBGW1"), 
       new ConnectionData("Table 2", "DBGW1"), 
       new ConnectionData("Table 3", "DBGW1"), 
       new ConnectionData("Table 4", "DBGW1"), 
       new ConnectionData("Table 5", "DBGW1"), 
       new ConnectionData("Table 6", "DBGW2"), 
       new ConnectionData("Table 7", "DBGW2"), 
       new ConnectionData("Table 8", "DBGW2"), 
       new ConnectionData("Table 9", "DBGW2"), 
       new ConnectionData("Table 10", "DBGW2"), 
       new ConnectionData("Table 11", "DBGW2"), 
       new ConnectionData("Table 12", "DBGW3")); 

Я хочу, чтобы, когда я нажимаю на главном узле Connection 1, чтобы открыть диалоговое окно. Кроме того, я хочу, когда я нажимаю на поднабор DBGW1, чтобы открыть новое диалоговое окно, и когда я нажимаю на дополнительный узел Table, чтобы открыть простой диалог 3td. Где и как я должен разместить слушателей событий, чтобы вызвать метод Java или обновить основной этап.

+3

И еще один ... Почему бы вам не сделать свой SQLBrowser с открытым исходным кодом и попытаться найти людей, которые развиваются его/с вами? – Kai

+0

selectionlistener .... – Kalaschni

ответ

0

Для того, чтобы понять ситуацию: treeItem - это вещь, которая добавляется в древовидную структуру. Позже, treeCell создается для каждого treeItem. Технически, по умолчанию, есть treeCellFactory по умолчанию, но вы можете создать свой собственный завод, который для каждого treeItem создаст TreeCell.

И для каждого дереваCell вы можете вручную добавить слушателя, который будет прослушивать события взаимодействия и реагировать на них соответствующим образом.

Но ваш случай взаимодействия прост: вы можете добавить слушателя на текущий сфокусированный узел или текущий выбранный узел. (Кажется, сфокусированный узел - лучший выбор).

Таким образом, использовать некоторые из этих методов:

TreeView tv = new TreeView(); 
    tv.getFocusModel().focusedIndexProperty().addListener(...); 
    tv.getFocusModel().focusedItemProperty().addListener(...); 
    tv.getSelectionModel().selectedIndexProperty().addListener(...); 
    tv.getSelectionModel().selectedItemProperty().addListener(...); 
Смежные вопросы