JavaFX 拆分菜单按钮箭头触发事件

标签 java javafx

我有一个 SplitMenuButton,但我似乎找不到在用户单击按钮旁边的箭头时触发事件的方法。

我希望在单击下拉箭头时下拉列表中填充数据库中的项目。

我不确定哪个事件可以做到这一点,我也找不到任何相关信息。

最佳答案

简短回答:使用 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);
    }
}

顺便说一句,我不确定这是否是一个真正的好主意。数据库连接通常是长时间运行的进程(即足够长以在 UI 环境中在视觉上引人注目)。如果您在 FX 应用程序线程上运行此代码,那么您将在检索数据时阻止 UI 执行任何操作,并且这也是在用户刚刚尝试执行某些操作时发生的。当然,如果您将其作为后台任务运行,那么菜单将弹出以前的数据,然后在数据下载后更新。我建议在用户请求之前找到一种方法来填充它。

关于JavaFX 拆分菜单按钮箭头触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26895534/

相关文章:

java - lwjgl 和 slick - 旋转光滑纹理

java - 在静态方法上使用 this 关键字

java - 如何从构造函数中设置 JavaFX 中 TextArea 的文本?

java - Java 中的多个 for 循环无法正常工作

java - 为什么 java 中没有 Optional 的公共(public)构造函数?

java - 在Java中使用并行流但没有得到预期的值

JavaFX 并发 - 使用任务,该任务在线程中运行,但挂起 UI

java - 在 JavaFX 中使用 1 个阶段和多个场景登录应用程序

java - 如何通过操作 ObservableList 来引发置换事件?

JavaFX - 从 SwingNode 中删除元素