在JavaFX中获取按钮的ID

时间:2017-12-07 17:05:43

标签: javafx

我在javafx中创建了大约10个按钮,每个按钮onclick都假设以某种方式更改标签字段。我的问题是我不想为每个标签创建10种不同的方法我想使用一种方法然后测试按钮的id如果正确我会预先形成我想要的

我要问的例子

   if (button.id == Info_205_btn) {
        System.out.println("clicked");
     subject_name.setText("stanly");
    } 

这是@math回答后的更新

这是我做的代码

    @FXML
    private void chooseSubject() {
  for (int i = 0; i < buttonInfo.length; i++) {
            buttonInfo[i] = new Button("Info"+i);
            buttonInfo[i].setId("Info"+i);
            int finalI = i;
            buttonInfo[i].setOnAction(event -> checkID(buttonInfo[finalI]));
        }
    }


    @FXML
    private void checkID(Button button){
                System.out.println("running");

    if (button.getId().equals("Info0")) {
        System.out.println("clicked");
       subject_name.setText("stanly");
    }
    else if (button.getId().equals("Info1")) {
        System.out.println("clicked");
       subject_name.setText("stanly1");
    }
}


    @Override
    public void initialize(URL url, ResourceBundle rb) {
         chooseSubject();
    }    

同样点击我将方法chooseSubject放在FXML控制器

1 个答案:

答案 0 :(得分:1)

对于你的所有按钮,我认为你仍然需要放一个.setOnAction,但你可以让它们都指向相同的功能

button.setOnAction(event -> checkID(button));

并从该函数检查id

private void checkID(Button button){
    if (button.getId().equals("Info_205_btn")) {
        System.out.println("clicked");
        button.setText("stanly");
    }
    else if (button.getId().equals("Info_206_btn")) {
        System.out.println("clicked");
        button.setText("stanly");
    }
    //So on
}

此外,如果您将所有按钮放入列表中,或者如果它们已经在列表中,您可以遍历列表并以.setOnAction方式执行

for (int i = 0; i < buttonList.length; i++) 
    button[i].setOnAction(event -> checkId((Button) event.getSource()));

这是我刚刚写的一个测试程序给你一个例子

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        Button[] buttonList = new Button[10];

        for (int i = 0; i < buttonList.length; i++) {
            buttonList[i] = new Button("Button "+i);
            buttonList[i].setId("Button"+i);
            buttonList[i].setOnAction(event -> checkId((Button) event.getSource()));
        }

        VBox root = new VBox();
        root.setAlignment(Pos.CENTER);
        root.getChildren().addAll(buttonList);
        Scene scene = new Scene(root);
        Stage stage = new Stage();
        stage.setWidth(200);
        stage.setScene(scene);
        stage.show();
    }

    private void checkId(Button button) {
        for (int i = 0; i <= 10; i++) {
            if(button.getId().equals("Button" + i))
                if(!button.getText().equals("Button " + i + " Clicked"))
                    button.setText("Button " + i + " Clicked");
                else
                    button.setText("Button " + i);
        }
    }

    public static void main(String[] args) { launch(args); }
}

编辑:被带走了