Mam etap ze zmienną listą pól wyboru. Kiedy lista zmienia się, etap musi się zmienić. Działa to dobrze w większości przypadków, po dodaniu wszystkich pól wyboru do VBox, a następnie wywołanie stage.sizeToScene() i etap odpowiednio zmienia rozmiar. Jeśli jednak umieścisz to wszystko w Tab w ramach TabPane, stage.sizeToScene() już nie działa. Trochę utknąłem, dlaczego tak jest. Czy ktoś ma dobrą pracę lub rozwiązanie?JavaFX TabPane i zmiana rozmiaru obiektu nadrzędnego Etap
Przykładowy kod znajduje się poniżej. Wystarczy zmienić pole withTabs na false lub true, aby pokazać sytuację bez i z TabPane.
Dzięki za pomoc.
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TabResizeError extends Application {
boolean withTabs=false;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
//holds variable number of check boxes
VBox channelBox=new VBox();
channelBox.setSpacing(5);
//create controls
HBox controlsHBox=new HBox();
controlsHBox.setSpacing(5);
Button btn = new Button();
btn.setText("Resize Test");
ComboBox<Integer> comboBox=new ComboBox<Integer>();
ObservableList<Integer> number=FXCollections.observableArrayList();
for (int i=0; i<32; i++){
number.add(i);
}
comboBox.setItems(number);
comboBox.getSelectionModel().select(5);
controlsHBox.getChildren().addAll(btn, comboBox);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//remove all check boxes
channelBox.getChildren().removeAll(channelBox.getChildren());
//add new check boxes
for (int i=0; i<comboBox.getSelectionModel().getSelectedItem(); i++){
CheckBox checkBox=new CheckBox(("Channel "+i));
channelBox.getChildren().add(checkBox);
}
primaryStage.sizeToScene();
}
});
Pane root=null;
VBox mainPane = new VBox();
mainPane.getChildren().addAll(controlsHBox,channelBox);
mainPane.setSpacing(5);
if (withTabs){
TabPane tabbedPane=new TabPane();
Tab tab=new Tab("TestTab");
tab.setContent(mainPane);
tabbedPane.getTabs().add(tab);
root=new BorderPane(tabbedPane);
}
else{
root = mainPane;
}
// root.setTop(controlsHBox);
// root.setCenter(channelBox);
primaryStage.setScene(new Scene(root));
primaryStage.setMinHeight(300);
primaryStage.show();
}
}
Dziękuję bardzo! Doceń odpowiedź - i zawsze dobrze, aby inni ludzie ją przeczytali. – macster110