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

个人简历

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

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

@FXML
    private void setLid(ActionEvent event) {
        Stage stage = new Stage();
        VBox box = new VBox();
        box.setPadding(new Insets(10));

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

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

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

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

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

        box.getChildren().add(label);
        box.getChildren().add(tablePers);
        box.getChildren().add(btnSelectCurrentLid);

        Scene scene = new Scene(box, 250, 150);
        stage.setScene(scene);
        stage.show();
    }
编码器

这是一个单文件mcve(将整个代码复制粘贴到其中FxMain.java并运行):

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;  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在按钮单击上隐藏并显示第二个表单

来自分类Dev

如何通过单击第一个按钮刷新第二个窗口

来自分类Dev

我如何在单击按钮时打开第二个QML页面

来自分类Dev

我如何在单击按钮时打开第二个QML页面

来自分类Dev

如何使用C#打开第二个窗口选择菜单(开始+ P)?

来自分类Dev

单击第二个按钮时 JavaFX 场景冻结

来自分类Dev

在Qt中打开第二个窗口

来自分类Dev

在按钮单击UI对话框上无法在Chrome中显示第二个覆盖图

来自分类Dev

单击第二个按钮上的“参数太多”,C#

来自分类Dev

如何从MKannotation的第二个按钮中选择?

来自分类Dev

Nativescript-在按钮上单击打开SideDrawer

来自分类Dev

在按钮上单击打开移动键盘

来自分类Dev

Nativescript-在按钮上单击打开SideDrawer

来自分类Dev

第二个屏幕上的JavaFX全屏

来自分类Dev

[PyQt]每次按下按钮时打开第二个窗口而不关闭程序

来自分类Dev

如果在指定时间内未单击按钮,则关闭表单并打开第二个表单

来自分类Dev

如何从pyqt中的第一个窗口打开第二个窗口?

来自分类Dev

JavaFX 在第一个窗口之后显示第二个窗口

来自分类Dev

宏伟的弹出窗口:使用不同的选项打开第二个弹出窗口

来自分类Dev

WPF禁用主窗口,而第二个窗口打开直到关闭

来自分类Dev

PyQt5从主窗口打开第二个窗口

来自分类Dev

jQuery:单击第一个按钮后启用第二个按钮

来自分类Dev

Android-如果在第二个按钮上单击,则运行下一步

来自分类Dev

单击第二个按钮(相同的按钮)Selenium python

来自分类Dev

单击时无法禁用第二个按钮或任何其他按钮

来自分类Dev

选择上的下拉菜单按钮禁用第二个下拉菜单选项

来自分类Dev

如何隐藏第二个按钮并仅在按下第一个按钮时显示它?

来自分类Dev

如何使第二个活动中的按钮打开第三个活动?

来自分类Dev

OS X第二个窗口将保持打开状态

Related 相关文章

  1. 1

    在按钮单击上隐藏并显示第二个表单

  2. 2

    如何通过单击第一个按钮刷新第二个窗口

  3. 3

    我如何在单击按钮时打开第二个QML页面

  4. 4

    我如何在单击按钮时打开第二个QML页面

  5. 5

    如何使用C#打开第二个窗口选择菜单(开始+ P)?

  6. 6

    单击第二个按钮时 JavaFX 场景冻结

  7. 7

    在Qt中打开第二个窗口

  8. 8

    在按钮单击UI对话框上无法在Chrome中显示第二个覆盖图

  9. 9

    单击第二个按钮上的“参数太多”,C#

  10. 10

    如何从MKannotation的第二个按钮中选择?

  11. 11

    Nativescript-在按钮上单击打开SideDrawer

  12. 12

    在按钮上单击打开移动键盘

  13. 13

    Nativescript-在按钮上单击打开SideDrawer

  14. 14

    第二个屏幕上的JavaFX全屏

  15. 15

    [PyQt]每次按下按钮时打开第二个窗口而不关闭程序

  16. 16

    如果在指定时间内未单击按钮,则关闭表单并打开第二个表单

  17. 17

    如何从pyqt中的第一个窗口打开第二个窗口?

  18. 18

    JavaFX 在第一个窗口之后显示第二个窗口

  19. 19

    宏伟的弹出窗口:使用不同的选项打开第二个弹出窗口

  20. 20

    WPF禁用主窗口,而第二个窗口打开直到关闭

  21. 21

    PyQt5从主窗口打开第二个窗口

  22. 22

    jQuery:单击第一个按钮后启用第二个按钮

  23. 23

    Android-如果在第二个按钮上单击,则运行下一步

  24. 24

    单击第二个按钮(相同的按钮)Selenium python

  25. 25

    单击时无法禁用第二个按钮或任何其他按钮

  26. 26

    选择上的下拉菜单按钮禁用第二个下拉菜单选项

  27. 27

    如何隐藏第二个按钮并仅在按下第一个按钮时显示它?

  28. 28

    如何使第二个活动中的按钮打开第三个活动?

  29. 29

    OS X第二个窗口将保持打开状态

热门标签

归档