我想创建一个命令列表,用于运行程序的ProcessBuilder,具体取决于在GUI上选择的内容。如何使用切换按钮建立字符串列表
我有10个按钮,我需要每个按钮来返回并添加一个字符串列表 当切换和删除它,而没有切换。
我正试图将.isSelected添加到列表中,并在禁用时将其删除。 但我认为这不是一个好方法。
有没有人有任何想法?
编辑:是否将所有按钮添加到ToggleGroup并使用Switch是一个有效的解决方案?
我想创建一个命令列表,用于运行程序的ProcessBuilder,具体取决于在GUI上选择的内容。如何使用切换按钮建立字符串列表
我有10个按钮,我需要每个按钮来返回并添加一个字符串列表 当切换和删除它,而没有切换。
我正试图将.isSelected添加到列表中,并在禁用时将其删除。 但我认为这不是一个好方法。
有没有人有任何想法?
编辑:是否将所有按钮添加到ToggleGroup并使用Switch是一个有效的解决方案?
谢谢你们我去的是这样的:
public ToggleButton getBuildBtn() {
final ToggleButton button = new ToggleButton("Build");
button.setStyle("-fx-font: 15 verdana; -fx-base: " + buttonsColor + ";");
button.setOnAction(event -> selectedhandler(button, "build"));
return button;
}
private void selectedhandler(final ToggleButton button, String command) {
if (button.isSelected()) {
button.setStyle("-fx-base: #00ff0f;");
commands.add(command);
} else {
button.setStyle("-fx-base: " + buttonsColor + ";");
commands.remove(command);
}
}
我会去想enumSet而重构。谢谢。
我会使用EnumSet。为每个Button定义一个枚举常量(带有要显示的名称属性),然后让togglebutton添加或删除集合中的枚举。通过这种方式,按钮类只需要具有作为它的常量枚举集的构造函数的参数。
通过迭代EnumSet,可以轻松地将参数添加到命令行中。
这个方案的好处是,Button类可以是小的和通用(增加一个命令行选项将只需添加一个new CommandOptionButton(Options.VERBOSE, optionsSet)
,而集比添加和从列表中删除字符串算法好得多。
一个简单的实现是:
public class MyApplication extends Application {
private final List<String> commands = new ArrayList<>();
@Override
public void start(Stage primaryStage) {
VBox commandToggles = new VBox();
commandToggles.getChildren().add(createCommandToggle("Command 1", "exec1"));
commandToggles.getChildren().add(createCommandToggle("Command 2", "exec2"));
commandToggles.getChildren().add(createCommandToggle("Command 3", "exec3"));
// ...
Button runButton = new Button("Run");
runButton.setOnAction(e -> {
ProcessBuilder pb = new ProcessBuilder(commands);
// ...
});
// ...
}
private ToggleButton createCommandToggle(String text, String executable) {
ToggleButton button = new ToggleButton(text);
button.selectedProperty().addListener((obs, wasSelected, isSelected) -> {
if (isSelected) {
commands.add(executable);
} else {
commands.remove(executable);
}
}
return button ;
}
}
由于@Valette_Renoux建议,可以通过封装在enum
按钮的文本和可执行命令改进这一点,并用EnumSet
替换名单这使得建筑。切换按钮的重复性稍差一些(尽管您可能需要在runButton
处理程序中稍微多做一点工作才能提取命令)。
如果将所有按钮添加到切换组中,一次只能选择一个按钮,这可能不是您想要的... –