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

如何从javafx中的切换按钮获取文本,java,javafx,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.cont

我是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(){

}
}
package剧场;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.ToggleButton;
导入javafx.scene.layout.GridPane;
导入java.net.URL;
导入java.util.ResourceBundle;
公共类剧院控制器实现可初始化{
@FXML
私有网格窗格middleGridPane;
私有最终整数最大行=5;
私人最终整数最大值=5;
@凌驾
公共void初始化(URL、ResourceBundle、ResourceBundle){
int countRow=1;
ToggleButton[][]座位=新的ToggleButton[MAX_ROW][MAX_COL];
char lastRow='A'+(最大行-1);
for(字符行='A';行<最后一行;行++){
对于(int col=1;col
为什么要从切换中获取文本?不管怎样,它只有两种状态是真是假。我们可以使用状态自动推断。切换按钮仅提供状态,但不能提供文本


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

如果您希望有一个与
切换按钮相关联的值,则应使用按钮的
设置用户数据
方法。然后可以使用
getUserData
方法将其取回。

EventHandler
handle()
中使用的任何变量必须是
final

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

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(){

    }
}
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.ToggleButton;
导入javafx.scene.layout.GridPane;
导入java.net.URL;
导入java.util.ResourceBundle;
公共类剧院控制器实现可初始化{
@FXML
私有网格窗格middleGridPane;
私有最终整数最大行=5;
私人最终整数最大值=5;
@凌驾
公共void初始化(URL、ResourceBundle、ResourceBundle){
int countRow=1;
ToggleButton[][]座位=新的ToggleButton[MAX_ROW][MAX_COL];
char lastRow='A'+(最大行-1);
for(字符行='A';行<最后一行;行++){
对于(int col=1;col
Hi,我想从切换按钮获取文本,以便将其添加到列表中,以检查座位是否已预订。如果座位被预订了,按钮将被设置为禁用。这正是我想要的。我真的很感激,但是为什么我们必须初始化另一个变量来保存它呢?@TriDo因为变量
col
countRow
的值在循环中不断变化,而
finalCol
finalCountRow
的值只分配了一次,这使它们有效地保持良好状态。