import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TabPane.TabClosingPolicy;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ComboManagedBug extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
// add combo box
ComboBox combo = new ComboBox();
combo.setPromptText("Choose a value...");
combo.getItems().setAll("1", "2", "3");
// add list view
ListView list = new ListView();
// add "add" button
Button add = new Button("Add");
add.setOnAction(e -> list.getItems().add(
new Label(combo.getSelectionModel().getSelectedItem())));
// add tab pane
Tab tab1 = new Tab("First", new VBox(combo, add, list));
Tab tab2 = new Tab("Second");
TabPane tabs = new TabPane(tab1, tab2);
tabs.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE); // important!
// add "next" and "cancel" buttons at bottom
Button next = new Button("Next");
Button cancel = new Button("Cancel (Triggers refresh)");
HBox buttons = new HBox(next, cancel);
// install tab listener
tabs.getSelectionModel().selectedItemProperty().addListener((a, b, c) -> {
// intention is to show next button only on first tab
boolean firstTab = c == tab1;
next.setVisible(firstTab);
next.setManaged(firstTab); // important!
});
// show
VBox root = new VBox(new VBox(tabs, buttons)); // important!
Scene scene = new Scene(root, 400, 400);
primaryStage.setTitle("ComboBox/ListView Rendering Bug Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
}
< /code>
шаги для воспроизведения: < /prolly> < /p>
[*] Программа запуска < /li>
Выберите Combo Value -> Combobox показывает, что выбранная стоимость -> ok < /li>
uppe » ->« Добавлено ». /> Активировать вторую вкладку
[*] Активировать первую вкладку
[*] Выберите комбинированное значение, отличное от предыдущего -> Значение в Combobox не изменяется -> ошибка [/b]
[*] Нажмите «Добавить» -> Содержание списка. Внизу -> Несмотря на то, что в эту кнопку не было добавлено прослушивателя, как ComboBox, так и ListView показывают правильные значения сейчас. Таким образом, оба контейнера, кажется, содержат правильные значения, но они не будут выполнены правильно, пока не будет запущено некоторое освежение пользовательского интерфейса. Переключение вкладок, чтобы скрыть эту кнопку (обычный способ скрыть узел вместе с видимым состоянием узла, см. Javafx - setvisible не «скрыть» элемент)
[*] tabClosePolicy.Unavailable (Em> Come)
в em> (em> (em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em> em>. в реальной жизни при входе различных узлов компонентов Javafx). Я попробовал platform.runlater (cancel.fire ()) и похожие вещи, но без успеха. < /p>
Спасибо за любые подсказки, Питер. < /p>
Кстати. По нашему опыту, это очень надежное, и программирование Javafx - это весело. Я надеюсь, что для нашей проблемы есть простое решение
Подробнее здесь: https://stackoverflow.com/questions/580 ... x-listview