Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在单击树节点时刷新stage_Java_Javafx 2_Javafx - Fatal编程技术网

Java 如何在单击树节点时刷新stage

Java 如何在单击树节点时刷新stage,java,javafx-2,javafx,Java,Javafx 2,Javafx,我有一棵树,它可以生成包含数据的小树 public TitledPane createConnectionsList(String title) { TreeItem<String> rootNode = new TreeItem<>("Connection 1", null); rootNode.setExpanded(true); for (ConnectionData data : connectionDataLi

我有一棵树,它可以生成包含数据的小树

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"));
公共标题窗格createConnectionsList(字符串标题){
TreeItem rootNode=newtreeitem(“连接1”,null);
setExpanded(true);
for(ConnectionData数据:connectionDataList){
TreeItem connLeaf=newtreeitem(data.getDBGWName());
布尔值=false;
for(TreeItem depNode:rootNode.getChildren()){
if(depNode.getValue().contentEquals(data.getTableName())){
depNode.getChildren().add(connLeaf);
发现=真;
打破
}
}
如果(!找到){
TreeItem depNode=new TreeItem(data.getTableName(),null);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(connLeaf);
}
}
VBox box=新的VBox();
最终场景=新场景(框,700600);
场景。设置填充(颜色。浅灰色);
TreeView TreeView=新的TreeView(rootNode);
treeView.setShowRoot(真);
treeView.setEditable(true);
锚烷含量=新锚烷();
//设置对齐-用三个内容填充手风琴
AnchorPane.setLeftAnchor(树视图,0d);
AnchorPane.setRightAnchor(树视图,0d);
锚烷.后坐式锚(treeView,0d);
AnchorPane.setTopAnchor(树视图,0d);
content.getChildren().add(treeView);
//添加到TitelPane中
标题窗格=新标题窗格(标题、内容);
返回窗格;
}
公共列表连接催化剂;
公共静态类ConnectionData{
私有字符串DBGWName;
私有字符串表名;
公共连接数据(字符串DBGWName,字符串TableName){
this.DBGWName=DBGWName;
this.TableName=TableName;
}
公共字符串getDBGWName(){
返回DBGWName;
}
public void setDBGWName(字符串DBGWName){
this.DBGWName=DBGWName;
}
公共字符串getTableName(){
返回表名;
}
public void setTableName(字符串TableName){
this.TableName=TableName;
}
}
connectionDataList=Arrays.asList(
新连接数据(“表1”、“DBGW1”),
新连接数据(“表2”、“DBGW1”),
新连接数据(“表3”、“DBGW1”),
新连接数据(“表4”、“DBGW1”),
新连接数据(“表5”、“DBGW1”),
新连接数据(“表6”、“DBGW2”),
新连接数据(“表7”、“DBGW2”),
新连接数据(“表8”、“DBGW2”),
新连接数据(“表9”、“DBGW2”),
新连接数据(“表10”、“DBGW2”),
新连接数据(“表11”、“DBGW2”),
新连接数据(“表12”、“DBGW3”);

我想在单击主节点
连接1
时打开一个对话框。此外,我还希望在单击
DBGW1
子节点时打开一个新的对话框窗口,以及在单击子节点
时打开3td简单对话框。为了调用Java方法或刷新主阶段,我必须在何处以及如何放置事件侦听器。

为了让您了解这种情况:treeItem是一种添加在树结构中的东西。稍后,将为每个treeItem创建一个treeCell。从技术上讲,默认情况下有一个默认的treeCellFactory,但是您可以创建自己的工厂,这将为每个treeItem创建一个TreeCell

对于每个treeCell,您可以手动添加一个侦听器,它将侦听交互事件,并相应地对其作出反应

但是,您的交互情况很简单:您可以在当前关注的节点或当前选定的节点上添加侦听器。(看来,聚焦节点是最佳选择)

因此,请使用以下几种方法:

    TreeView tv = new TreeView();
    tv.getFocusModel().focusedIndexProperty().addListener(...);
    tv.getFocusModel().focusedItemProperty().addListener(...);
    tv.getSelectionModel().selectedIndexProperty().addListener(...);
    tv.getSelectionModel().selectedItemProperty().addListener(...); 

还有一个。。。为什么不让您的SQLBrowser开源,并尝试寻找为您/与您一起开发它的人呢?selectionlistener。。。。