[英]Method chose based on variable value
我正在编写用户的GUI,并且想创建一个方法,该方法将创建具有先前定义的名称和操作的各种按钮。 但是我不知道如何编写基于变量值的方法选择。 Google没有提供任何有用的信息。 任何人都可以提供帮助,否则这是不可能的?
这是一些代码示例:
String[] actions={"testAction1","testAction2","testAction3"};
defaultDialogWindow(actions,"test1", "test2", "test3");
void defaultDialogWindow(String[] actions, String... bNames){
double layoutX = 25;
double spacing = 15;
final Stage dialogStage = new Stage();
dialogStage.initOwner(stage);
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setFullScreen(false);
dialogStage.setResizable(false);
dialogStage.setHeight(100);
dialogStage.setWidth(bNames.length*100+(bNames.length-1)*spacing+2*layoutX+5);
dialogStage.setScene(new Scene(buttonBuilder(actions,spacing,layoutX,bNames)));
dialogStage.show();
}
HBox buttonBuilder(String[] actions, double spacing,double layoutX,String... bNames){
HBox lBar = new HBox(10);
final ReadOnlyDoubleProperty menuWidthProperty = lBar.widthProperty();
lBar.setAlignment(Pos.CENTER_LEFT);
lBar.setLayoutX(layoutX);
lBar.setSpacing(spacing);
for(String text : bNames){
Button newButton = new Button();
newButton.setText(text);
newButton.setFont(Font.font("Times New Roman", 22));
newButton.prefWidthProperty().set(100);
newButton.prefHeightProperty().set(50);
newButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent paramT) {
**HERE MUST BE ACTION CALL BASED ON bNames VALUE**
System.out.println("button pressed");
}
});
lBar.getChildren().add(newButton);
}
System.out.println(lBar.prefWidth(-1));
return lBar;
}
void testAction1(){
System.out.println("this is test action one");
}
void testAction2(){
System.out.println("this is test action two");
}
void testAction3(){
System.out.println("this is test action three");
}**strong text**
使用HashMap:
Map<String, Runnable> actions2methods = new HashMap<>;
actions2methods.put("Action1", new Runnable { public void run() { testAction1(); }));
你甚至可以让这个更容易,如果你的行动将是Runnable
的,而不是从一开始的方法。
您可以使用ActionEvent
的actionCommand
属性来传达执行了哪个操作。 这默认为按钮的标签,但也可以使用Button.setActionCommand()
进行设置(不影响标签Button.setActionCommand()
。
newButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent paramT) {
String actionCmd = paramT.getActionCommand();
if (actionCmd.equals("A")) {
doA();
} else if (actionCmd.equals("B")) {
doB();
}
System.out.println("button pressed");
}
});
http://docs.oracle.com/javase/6/docs/api/java/awt/Button.html#setActionCommand%28java.lang.String%29
http://docs.oracle.com/javase/6/docs/api/java/awt/event/ActionEvent.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.