Короткий ответ: зарегистрируйте слушателя с showing
property.
import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.scene.Scene;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SplitMenuButton;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class SplitMenuButtonTest extends Application {
@Override
public void start(Stage primaryStage) {
IntegerProperty count = new SimpleIntegerProperty();
SplitMenuButton splitMenuButton = new SplitMenuButton();
splitMenuButton.setText("Action");
splitMenuButton.showingProperty().addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
int c = count.get() + 1;
count.set(c);
splitMenuButton.getItems().clear();
for (int choice = 1; choice <= 3; choice++) {
MenuItem mi = new MenuItem("Choice "+choice+" (" + c + ")");
splitMenuButton.getItems().add(mi);
}
}
});
BorderPane root = new BorderPane(null, splitMenuButton, null, null, null);
primaryStage.setScene(new Scene(root, 350, 150));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Отклонитесь, я не уверен, что это действительно хорошая идея. Соединения с базами данных - это, как правило, длительные процессы (т. Е. Достаточно долго, чтобы быть визуально заметными в среде пользовательского интерфейса). Если вы запустите это в потоке приложения FX, вы собираетесь заблокировать пользовательский интерфейс от выполнения чего-либо во время получения данных, и это также верно в тот момент, когда пользователь только что пытался что-то сделать. Конечно, если вы запустите его в качестве фоновой задачи, тогда в меню появится всплывающее окно с предыдущими данными, а затем будет обновлено после загрузки данных. Я бы рекомендовал найти способ заполнить это до того, как пользователь запросит его.
База данных представляет собой локальную базу данных SQLite, в которой данные не передаются по сети. В основном это 'select * from table', который, вероятно, вернет менее 100 результатов –