小编Nad*_*der的帖子

使用FXML在窗格内创建ContextMenu

我有一个工作示例,用于在JavaFX FXML中的窗格上定义ContextMenu,但我不确定它是否是最佳的.目前,只有JavaFX标准控件(例如Button,TextField)定义用于指定弹出ContextMenu的属性.然而,我想在一个窗格中出现一个弹出菜单,在我的例子中是一个VBox.

我采用扩展VBox的方法来支持上下文菜单.这是一个'笨重'的解决方案,但有效.有更好的方法吗?我错过了一些基本概念吗?

这是我的解决方案......

FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import custommenu.view.ContextMenuPane?>

<AnchorPane xmlns:fx="http://javafx.com/fxml" fx:controller="custommenu.controller.CustomMenuController">
    <children>
        <VBox fx:id="vbox" onContextMenuRequested="#showMenu"
            onMousePressed="#hideMenu" prefHeight="200" prefWidth="200">
        </VBox>
        <ContextMenuPane>
            <contextMenu>
                <ContextMenu fx:id="menu">
                    <items>
                        <MenuItem text="add" onAction="#add" />
                    </items>
                </ContextMenu>
            </contextMenu>
        </ContextMenuPane>
    </children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)

CustomMenuPane ...

package custommenu.view;

import javafx.scene.control.ContextMenu;
import javafx.scene.layout.Pane;

public class ContextMenuPane extends Pane {

    private ContextMenu contextMenu;

    public void setContextMenu(ContextMenu contextMenu) {
        this.contextMenu = contextMenu;
    }

    public ContextMenu getContextMenu() {
        return contextMenu;
    }

}
Run Code Online (Sandbox Code Playgroud)

控制器...

package custommenu.controller;

import javafx.fxml.FXML;
import …
Run Code Online (Sandbox Code Playgroud)

javafx javafx-2 fxml

6
推荐指数
1
解决办法
8832
查看次数

Paths.get() / Path.of() 在升级到 Java 16 时抛出 NullPointerException

从 Java 15 升级到 Java 16 时,由于空指针异常,我的一些单元测试开始失败。该问题是由传递给 Paths.get() api 的空值引起的。Java 16 中发生了什么变化以使其成为错误?

我正在使用 OpenJDK 版本 16.0.2 并在 macos 上运行。

java path java-16

6
推荐指数
2
解决办法
126
查看次数

标签 统计

fxml ×1

java ×1

java-16 ×1

javafx ×1

javafx-2 ×1

path ×1