【问题标题】:How can shift my tab view from one to another in JavaFx如何在 JavaFx 中将我的选项卡视图从一个切换到另一个
【发布时间】:2016-09-30 02:35:13
【问题描述】:

我正在做一个 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 :)

【问题讨论】:

  • 您肯定只想在for 循环中使用selectionModel.select(tabs) 而不是selectionModel.select(tab)? (如果将Tab tab = new Tab() 移到循环之后,会更清楚。)

标签: javafx tabview fxmlloader


【解决方案1】:

你好 Danial 你可以使用(row)cell.setUserData(); 并为每个真值设置默认值。并且 onClick 这一行(单元格)你应该检查这个数据(row)cell.getUserData(); 如果它是真的而不是将其更改为假并在另一种情况下打开窗口什么都不做。

示例:

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。

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多