Button Javafx:在按钮上单击“打开第二个选择窗口”

Button Javafx:在按钮上单击“打开第二个选择窗口”,button,javafx,window,Button,Javafx,Window,我正在制作一个按钮,打开一个新窗口,其中包含成员的gridview,显示他们的姓名和排名。可以单击某个成员以将其设置为currentMember。但是,我的JavaFX知识有限,我不知道如何在不更改当前控制器的情况下创建这个临时窗口。我不确定我所拥有的是否是一个好的方法。我做错了什么,还是这是正确的做法 单击“选择人员”按钮时,此代码将运行 @FXML 私有void setLid(ActionEvent事件){ 阶段=新阶段(); VBox box=新的VBox(); 框。设置填充(新插图(10

我正在制作一个按钮,打开一个新窗口,其中包含成员的gridview,显示他们的姓名和排名。可以单击某个成员以将其设置为currentMember。但是,我的JavaFX知识有限,我不知道如何在不更改当前控制器的情况下创建这个临时窗口。我不确定我所拥有的是否是一个好的方法。我做错了什么,还是这是正确的做法

单击“选择人员”按钮时,此代码将运行

@FXML
私有void setLid(ActionEvent事件){
阶段=新阶段();
VBox box=新的VBox();
框。设置填充(新插图(10));
TableView tablePers=新TableView();
TableColumn voornaam=新TableColumn();
TableColumn achternaam=新的TableColumn();
TableColumn graad=新TableColumn();
voornaam.setCellValueFactory(cellData->cellData.getValue().voornaamProperty());
voornaam.setCellFactory(TextFieldTableCell.forTableColumn());
AchterNAM.setCellValueFactory(cellData->cellData.getValue().achternaamProperty());
graad.setCellValueFactory(cellData->cellData.getValue().graadProperty());
标签=新标签(“Selecteer een persoon”);
按钮btnSelectCurrentLid=新按钮();
btnSelectCurrentLid.setText(“Bevstigen”);
btnSelectCurrentLid.setOnAction((ActionEvent e)->{
geselecteerdePersoon=(tablePers.getSelectionModel().getSelectedItem());
stage.close();
});
box.getChildren().add(标签);
box.getChildren().add(tableters);
box.getChildren().add(btnSelectCurrentLid);
场景=新场景(框,250,150);
舞台场景;
stage.show();
}
这里有一个文件(将整个代码复制粘贴到
FxMain.java
并运行):

导入javafx.application.application;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.beans.property.StringProperty;
导入javafx.event.ActionEvent;
导入javafx.geometry.Insets;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ButtonType;
导入javafx.scene.control.Dialog;
导入javafx.scene.control.Label;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.TextFieldTableCell;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类FxMain扩展了应用程序{
私人参选人;
@凌驾
public void start(Stage primaryStage)引发异常{
标签selectedPersonInfo=新标签();
按钮开始=新按钮(“显示选项卡”);
开始。设置操作(e->{
新建LoginDialog().showAndWait();
selectedPersonInfo.setText(“Selected:+geselecteerdePersoon.voornaamProperty().get())
+“”+geselecteerdePersoon.achternaamProperty().get());
});
BorderPane root=新边框窗格(selectedPersonInfo);
root.setBottom(开始);
原始阶段。设置场景(新场景(根,300300));
primaryStage.show();
}
公共静态void main(最终字符串[]args){
发射(args);
}
类LoginDialog扩展对话框{
公共后勤{
VBox box=新的VBox();
框。设置填充(新插图(10));
TableView tablePers=新TableView();
TableColumn voornaam=新的TableColumn(“名称”);
TableColumn achternaam=新的TableColumn(“姓氏”);
TableColumn graad=新的TableColumn(“等级”);
voornaam.setCellValueFactory(cellData->cellData.getValue().voornaamProperty());
voornaam.setCellFactory(TextFieldTableCell.forTableColumn());
AchterNAM.setCellValueFactory(cellData->cellData.getValue().achternaamProperty());
graad.setCellValueFactory(cellData->cellData.getValue().graadProperty());
tablePers.getColumns().addAll(voornaam、achternaam、graad);
tablePers.getItems()添加(新人物(“Alice”、“Bee”、“70”);
tablePers.getItems()添加(新的Persoon(“Charly”、“Din”、“32”));
标签=新标签(“Selecteer een persoon”);
按钮btnSelectCurrentLid=新按钮();
btnSelectCurrentLid.setText(“Bevstigen”);
btnSelectCurrentLid.setOnAction((ActionEvent e)->{
geselecteerdePersoon=tablePers.getSelectionModel().getSelectedItem();
close();
});
box.getChildren().addAll(标签、制表符、btnSelectCurrentLid);
getDialogPane().setContent(框);
getDialogPane().getButtonTypes().addAll(ButtonType.CANCEL);
}
}
}
班长{
私有最终SimpleStringProperty lName;
私有最终SimpleStringProperty fName;
私人物业等级;
公共人员(字符串fName、字符串lName、字符串等级){
this.fName=新的SimpleStringProperty(fName);
this.lName=新的SimpleStringProperty(lName);
this.grade=新的SimpleStringProperty(grade);
}
公共最终StringProperty achternaamProperty(){return lName;}
public final StringProperty voornaamProperty(){return fName;}
公共最终StringProperty graadProperty(){return grade;}
}

您可能会争辩说,最好将这种逻辑移到另一个类中。。。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxMain extends Application {

    private Persoon geselecteerdePersoon;

    @Override
    public void start(Stage primaryStage) throws Exception{

        Label selectedPersonInfo = new Label();
        Button start = new Button("Show Tabel");
        start.setOnAction(e-> {
            new LoginDialog().showAndWait();
            selectedPersonInfo.setText("Selected: " +geselecteerdePersoon.voornaamProperty().get()
                                          + " " +geselecteerdePersoon.achternaamProperty().get());
        });

        BorderPane root = new BorderPane(selectedPersonInfo);
        root.setBottom(start);
        primaryStage.setScene(new Scene(root, 300,300));
        primaryStage.show();
    }

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

    class LoginDialog extends Dialog {

        public LoginDialog() {

            VBox box = new VBox();
            box.setPadding(new Insets(10));

            TableView<Persoon> tablePers = new TableView<>();
            TableColumn<Persoon, String> voornaam = new TableColumn<>("Name");
            TableColumn<Persoon, String> achternaam = new TableColumn<>("Last Name");
            TableColumn<Persoon, String> graad = new TableColumn<>("Grade");

            voornaam.setCellValueFactory(cellData -> cellData.getValue().voornaamProperty());
            voornaam.setCellFactory(TextFieldTableCell.forTableColumn());
            achternaam.setCellValueFactory(cellData -> cellData.getValue().achternaamProperty());
            graad.setCellValueFactory(cellData -> cellData.getValue().graadProperty());

            tablePers.getColumns().addAll(voornaam, achternaam, graad);
            tablePers.getItems().add(new Persoon("Alice", "Bee","70"));
            tablePers.getItems().add(new Persoon("Charly", "Din","32"));

            Label label = new Label("Selecteer een persoon");

            Button btnSelectCurrentLid = new Button();
            btnSelectCurrentLid.setText("Bevestigen");

            btnSelectCurrentLid.setOnAction((ActionEvent e) -> {
                 geselecteerdePersoon = tablePers.getSelectionModel().getSelectedItem();
                 close();
            });

            box.getChildren().addAll(label, tablePers, btnSelectCurrentLid);
            getDialogPane().setContent(box);
            getDialogPane().getButtonTypes().addAll(ButtonType.CANCEL);
        }
    }
}

class Persoon {

    private final SimpleStringProperty lName;
    private final SimpleStringProperty fName;
    private final SimpleStringProperty grade;

    public Persoon(String fName, String lName, String grade) {

        this.fName = new SimpleStringProperty(fName);
        this.lName = new SimpleStringProperty(lName);
        this.grade = new SimpleStringProperty(grade);
    }

    public final StringProperty achternaamProperty() {  return lName;   }

    public final StringProperty voornaamProperty() { return fName; }

    public final StringProperty graadProperty() { return grade;  }
}