如何让简单菜单按钮在JavaFX中显示菜单项文本



>我正在为工作构建一个库存管理系统,当我单击该项目时,在让 SplitMenuButton 显示菜单项时遇到了很多麻烦。我在互联网上找不到太多关于"SplitMenuButton"的信息,并且也尝试了MenuButton,但没有运气。例如,默认文本是"部门",我希望它在选择该菜单项时显示"无菌",或在选择该菜单项时显示"设施"。

我尝试在运行 #buildDataAseptic 方法时创建一个 SplitMenuButton 和 setText("无菌")的新实例,但这仍然不起作用。

我的 fxml 代码是:

<SplitMenuButton mnemonicParsing="false" prefHeight="25.0" prefWidth="217.0" text="Department" textAlignment="CENTER">
                <items>
                  <MenuItem fx:id="asepticMenuItem" mnemonicParsing="false" onAction="#buildDataAseptic" text="Aseptic" />
                  <MenuItem fx:id="generalMenuItem" mnemonicParsing="false" onAction="#buildDataGeneral" text="General" />
                    <MenuItem fx:id="facilitiesMenuItem" mnemonicParsing="false" onAction="#buildDataFacilities" text="Facilities" />
                </items>
              </SplitMenuButton>

任何帮助都非常感谢,谢谢!

正如其他人指出的那样,ComboBox 是您用例的更好选择。

下面是一个自包含的示例。首先是FXML:

<?import javafx.scene.control.ComboBox?>
<?import javafx.collections.FXCollections?>
<?import java.lang.String?>
<ComboBox xmlns:fx="http://javafx.com/javafx/null">
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="Aseptic" />
            <String fx:value="General" />
            <String fx:value="Facilities" />
        </FXCollections>
    </items>
</ComboBox>

和带有注释的应用程序:

package sample;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;
public class Main extends Application {
    public void start(Stage primaryStage) throws Exception {
        ComboBox<String> comboBox = FXMLLoader.load(getClass().getResource("test.fxml"));
        // Create an observable property for the selection
        SimpleStringProperty selected = new SimpleStringProperty();
        // Bind the property to the comboBox
        selected.bindBidirectional(comboBox.valueProperty());
        // Set initial value
        selected.set("Facilities");
        // React to changes
        selected.addListener((observable, oldValue, newValue) -> {
            // newValue contains the new selection, update database
            System.out.println(newValue);
        });
        primaryStage.setScene(new Scene(comboBox));
        primaryStage.show();
    }
    public static void main(String[] args) {
        Application.launch(args);
    }
}

一般建议:不要仅仅因为你花了很多时间就坚持使用SplitMenuButton。将此视为一种学习经历。如果你不学会放手和重构,你永远不会创造出好的软件:)

最新更新