有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从javafx中的切换按钮获取文本

我是JavaFX新手。我正在做电影预订项目。我尝试在循环切换按钮后从该按钮检索文本,但没有看到getText()方法。有没有办法从切换按钮获取文本

这是我的密码:

package theatre;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;

import java.net.URL;
import java.util.ResourceBundle;

public class TheatreController implements Initializable {

@FXML
private GridPane middleGridPane;

private final int MAX_ROW = 5;
private final int MAX_COL = 5;

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    int countRow = 1;
    ToggleButton[][] seats = new ToggleButton[MAX_ROW][MAX_COL];

    char lastRow = 'A' + (MAX_ROW - 1);

    for(char row = 'A'; row < lastRow; row++){
        for (int col = 1; col < MAX_COL; col++){
            seats[countRow][col] = new ToggleButton(String.format(row + "%02d", col));
            seats[countRow][col].setPrefWidth(50);
            middleGridPane.add(seats[countRow][col], countRow, col);
            seats[countRow][col].setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    // Can't get text from here
                    event.getEventType().getName();
                }
            });

        }
        countRow++;
    }
}

@FXML
public void bookSeat(){

}
}

共 (3) 个答案

  1. # 1 楼答案

    为什么要从切换中获取文本?不管怎样,它只有两种状态是真是假。我们可以使用状态自动推断。切换按钮仅提供状态,但不能提供文本

    如果您特定于保存文本,则可能应该使用下拉菜单

  2. # 2 楼答案

    如果希望有一个值与ToggleButton关联,则应使用按钮的setUserData方法。然后可以使用getUserData方法将其取回

  3. # 3 楼答案

    EventHandlerhandle()中使用的任何变量必须是finaleffectively finel

    以下是您问题的解决方案:

    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.ToggleButton;
    import javafx.scene.layout.GridPane;
    import java.net.URL;
    import java.util.ResourceBundle;
    
    public class TheatreController implements Initializable {
        
        @FXML
        private GridPane middleGridPane;
        
        private final int MAX_ROW = 5;
        private final int MAX_COL = 5;
        
        @Override
        public void initialize(URL url, ResourceBundle resourceBundle) {
            int countRow = 1;
            ToggleButton[][] seats = new ToggleButton[MAX_ROW][MAX_COL];
            
            char lastRow = 'A' + (MAX_ROW - 1);
            
            for(char row = 'A'; row < lastRow; row++){
                for (int col = 1; col < MAX_COL; col++){
                    seats[countRow][col] = new ToggleButton(String.format(row + "%02d", col));
                    seats[countRow][col].setPrefWidth(50);
                    middleGridPane.add(seats[countRow][col], countRow, col);
                    
                    //effectively final variable to use in handle method of EventHandler
                    int finalCountRow = countRow;
                    int finalCol      = col;
                    
                    seats[countRow][col].setOnAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent event) {
        
                            //now you can get text from seats[finalCountRow][finalCol]
                            System.out.println(seats[finalCountRow][finalCol].getText());
                            event.getEventType().getName();
                        }
                    });
                }
                countRow++;
            }
        }
        
        @FXML
        public void bookSeat(){
        
        }
    }