当我在TabPane中单击选项卡时,我想取消选项卡更改。我想手动更改标签,而不是通过用户单击标签来更改。
我该怎么做?预先感谢。
答案 0 :(得分:2)
您可以使用事件过滤器来阻止您不希望标签页眉区域接收的事件。以下代码阻止了MOUSE_PRESSED
事件,该事件负责更改单击时的选项卡。内容区域内的任何单击都不会被阻止。
@Override
public void start(Stage stage) throws IOException {
Button btn = new Button("Click");
TabPane tp = new TabPane(new Tab("tab1", new StackPane(btn)), new Tab("tab2"));
btn.setOnAction(event-> {
tp.getSelectionModel().select(1); // change tab programmatically
});
tp.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
Node n = event.getPickResult().getIntersectedNode();
boolean outsideContentArea = true;
// iterate from node actually clicked to the TabPane
// and look for the content area
while (outsideContentArea && (n != tp)) {
if (n.getStyleClass().contains("tab-content-area")) {
outsideContentArea = false;
}
n = n.getParent();
}
if (outsideContentArea) {
// stop event propagation to any part
// of the TabPane outside the content area
event.consume();
}
});
Scene scene = new Scene(tp, 300, 300);
stage.setScene(scene);
stage.show();
}
答案 1 :(得分:0)
如果您想要这种类型的流程,可以通过隐藏选项卡以使它们无法被单击,然后添加按钮来迭代每个选项卡来实现此目的
您将需要以下行来隐藏标签
tabPane.setStyle("-fx-tab-max-height: -2;");//You can still see tabs at -1 not sure why
请注意,如果要隐藏标题空间(如下面的应用程序所示),则需要通过css进行操作,并且可以忽略上一行
.tab-pane {
-fx-tab-max-height: 0 ;
}
.tab-pane .tab-header-area {
visibility: hidden ;
}
,您还需要查看按钮的设置方式,以转到下一个选项卡和上一个选项卡,因为我不确定您的应用程序看起来像我刚刚使用按钮所做的那样,但是您可以使用相同的操作想到他就动了
Button buttonPlus = new Button("+");
buttonPlus.setOnAction(event -> {
int selectedIndex = tabPane.getSelectionModel().getSelectedIndex();
if(selectedIndex<tabPane.getTabs().size()-1)
tabPane.getSelectionModel().select(++selectedIndex);
});
Button buttonMinus = new Button("-");
buttonMinus.setOnAction(event -> {
int selectedIndex = tabPane.getSelectionModel().getSelectedIndex();
if(selectedIndex>0)
tabPane.getSelectionModel().select(--selectedIndex);
});
就像抬起头一样,您可以通过传递像tabPane.getSelectionModel().select(index);
这样的索引或通过传递像tabPane.getSelectionModel().select(tab);
这样的特定选项卡来更改选项卡
一旦创建并添加到场景中,您将可以轻松单击每个选项卡
在下面查看我的申请,如果您有任何疑问,请告诉我
public class Main extends Application {
@Override
public void start(Stage stage) {
TabPane tabPane = new TabPane();
tabPane.setStyle("-fx-tab-max-height: -2;");//You can still see tabs at -1
createNewTab(tabPane);
createNewTab(tabPane);
createNewTab(tabPane);
stage.setScene(new Scene(tabPane));
stage.show();
}
private void createNewTab(TabPane tabPane){
Tab tab = new Tab();
tab.setClosable(false);
addNodesToTab(tabPane, tab);
tabPane.getTabs().add(tab);
}
private void addNodesToTab(TabPane tabPane, Tab tab){
Button buttonPlus = new Button("+");
buttonPlus.setOnAction(event -> {
int selectedIndex = tabPane.getSelectionModel().getSelectedIndex();
if(selectedIndex<tabPane.getTabs().size()-1)
tabPane.getSelectionModel().select(++selectedIndex);
});
Button buttonMinus = new Button("-");
buttonMinus.setOnAction(event -> {
int selectedIndex = tabPane.getSelectionModel().getSelectedIndex();
if(selectedIndex>0)
tabPane.getSelectionModel().select(--selectedIndex);
});
tab.setContent(new VBox(new Label("Tab:"+tabPane.getTabs().size()),buttonPlus, buttonMinus));
}
}