如何在JavaFx中将我的选项卡视图从一个移动到另一个

时间:2016-09-30 02:35:14

标签: javafx tabview fxmlloader

我正在做一个JavaFx项目。我有一个表格视图,其中包含几个名称(例如BG Manager,User Management,Find Acl,....)。每次我点击这些名称中的每一个(或该表的每一行)时,它都会打开一个新标签,再次填充我之前列出的信息。这是一个示例函数,一旦我点击一个名为BG Management的行就被调用:

private void callBGManager(){
    try {
        Tab tab = new Tab ();
        FXMLLoader bgm = new FXMLLoader(getClass().getResource("/views/BGMWindow.fxml"));
        BGMController  bgmc = new BGMController(_session);
        bgm.setController(bgmc);
        Parent root = bgm.load();
        for (Tab tabs : TabPane1.getTabs()){
            if (tabs.getText().equals(ListView1.getSelectionModel().getSelectedItem())){
                SingleSelectionModel<Tab> selectionModel = TabPane1.getSelectionModel();
                selectionModel.select(tab);
                return;
            }
        }
        tab.setContent(root);
        tab.setText(ListView1.getSelectionModel().getSelectedItem());
        tab.closableProperty().set(true);
        TabPane1.setTabClosingPolicy(TabPane1.getTabClosingPolicy().SELECTED_TAB);
        TabPane1.getTabs().add(tab);
        SingleSelectionModel<Tab> selectionModel = TabPane1.getSelectionModel();
        selectionModel.select(tab);



    }catch(Exception e){
        e.printStackTrace();
    }

}

编译或操作此代码没有问题,因为它运行良好。以下是更好地了解情况的情景。我可以在我的列表中说5行,每次点击它们,如果它还没有打开,它会显示出来,如果它已经打开,没有任何反应。假设我已经在另一个选项卡视图中,并且BG Manager已经打开。点击它后,如何切换到BG Manager :)

1 个答案:

答案 0 :(得分:0)

你好Danial你可以使用(row)cell.setUserData();和deafult set为每个真值。并点击此行(单元格),您应该检查此数据(row)cell.getUserData();,如果它是真的,则将其更改为false,而在另一个案例中打开窗口则不执行任何操作。

示例:

table.setRowFactory( tv -> {
  TableRow<MyType> row = new TableRow<>();
  row.setOnMouseClicked(event ->{
        boolean result = (boolean) row.getUserData();
        if(result){
            row.setUserData(false);
            //There will be your method to open new window
            methodToOpenNewWindow(row);
        }else{
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("Information");
            alert.setContentText("This entity already was opened.");
            alert.show();
        }
    });
  return row ;
});

在关闭窗口的方法methodToOpenNewWindow中,将行userData设置为true。