如何让SimpleMenuButton在JavaFX中显示MenuItem文本?

时间:2016-02-27 02:26:31

标签: javafx

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

我已经尝试在运行#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>

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

1 个答案:

答案 0 :(得分:0)

正如其他人所指出的,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。将此视为一种学习体验。如果你不学会放手和重构,你永远不会创造出好的软件:)