>我正在为工作构建一个库存管理系统,当我单击该项目时,在让 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。将此视为一种学习经历。如果你不学会放手和重构,你永远不会创造出好的软件:)