Я хочу создать кнопку, которая будет создавать новую вкладку для tabPane при нажатии и справа от всех вкладок все время. Буду признателен, если есть пример, как это сделать.
Как создать кнопку «добавить вкладку» в JAVAFX?
comment
предполагая, что вы хотите + как f.i. во вкладках firefox: не поддерживается напрямую, вы можете попытаться либо написать свой собственный TabPaneSkin, либо найти стороннюю компанию, которая его поддерживает. Или взломайте, добавьте вкладку с плюсом в качестве заголовка и, выбрав ее в первый раз, заполните ее содержимое и добавьте еще одну с плюсом.
- person kleopatra   schedule 01.06.2020
Ответы (1)
Ваш код должен выглядеть примерно так, как показано ниже. В этом примере используется кнопка над TabPane.
public class TabPaneSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
TabPane tabPane = new TabPane();
VBox layout = new VBox(10); // VBox with spacing of 10. Button sits above TabPane
layout.getChildren().addAll(newTabButton(tabPane), tabPane); // Adding button and TabPane to VBox
stage.setScene(new Scene(layout));
stage.show();
}
// Button that adds a new tab and selects it
private Button newTabButton(TabPane tabPane) {
Button addTab = new Button("Create Tab");
addTab.setOnAction(event -> {
tabPane.getTabs().add(new Tab("New Tab")); // Adding new tab at the end, so behind all the other tabs
tabPane.getSelectionModel().selectLast(); // Selecting the last tab, which is the newly created one
});
return addTab;
}
}
Если вы хотите, чтобы это было как в браузере, этот код должен это сделать. Это использует пустую вкладку в конце, которая действует как кнопка. Вы можете добавить значок, например +, вместо текста в метке вкладки.
public class TabPaneSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
TabPane tabPane = new TabPane();
tabPane.getTabs().add(newTabButton(tabPane));
stage.setScene(new Scene(tabPane));
stage.show();
}
// Tab that acts as a button and adds a new tab and selects it
private Tab newTabButton(TabPane tabPane) {
Tab addTab = new Tab("Create Tab"); // You can replace the text with an icon
addTab.setClosable(false);
tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldTab, newTab) -> {
if(newTab == addTab) {
tabPane.getTabs().add(tabPane.getTabs().size() - 1, new Tab("New Tab")); // Adding new tab before the "button" tab
tabPane.getSelectionModel().select(tabPane.getTabs().size() - 2); // Selecting the tab before the button, which is the newly created one
}
});
return addTab;
}
}
person
Noah
schedule
01.06.2020
хм ... я подозреваю, что это не то, чего хочет ОП - требование больше похоже на + в f.i. вкладки фаерфокс..
- person kleopatra; 01.06.2020
Хорошо, я добавил эту опцию сейчас.
- person Noah; 01.06.2020