在新窗口中搜索结果(JavaFx)

时间:2017-11-29 13:12:11

标签: mysql javafx tableview textfield

我目前正在开发一个软件模块,包括使用JavaFx在数据库中搜索。 一切都按预期工作。 但唯一的问题是,在我的结果表中,我只显示了很少的搜索细节(来自UX问题:我有太多细节和长文本)。 我想要做的是显示一个新窗口,其中包含TextFields和TextArea中单击行的所有详细信息。 我查看了几个教程和答案,但遗憾的是没有任何工作。 任何帮助,将不胜感激! 谢谢。

SearchResult.setOnMouseClicked(new EventHandler<MouseEvent>() {
        Gemo temp;
        @Override
        public void handle(MouseEvent event) {
            Gemo row = SearchResult.getSelectionModel().getSelectedItem();
            if(row == null) {
                System.out.print("I am not in");
                return ;
            }
            else {
                temp = row;

                String id = String.format(temp.getRef());
                System.out.println(id);
                FXMLLoader loader=new FXMLLoader();
                loader.setLocation(getClass().getResource("DetailsWindow.fxml"));
                ControllerDetails gemodetails=loader.getController();
                ControllerDetails gd=new ControllerDetails();
                gd.SearchById(id);
                try{
                    loader.load();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Parent p= loader.getRoot();
                Stage stage=new Stage();
                stage.setTitle("More Details");
                stage.setScene(new Scene(p));
                stage.show();




            }


        }
    });




public class ControllerDetails {
    @FXML
    private TextField fn_patient;

    @FXML
    private TextField ln_patient;

    @FXML
    private TextField db_patient;

    @FXML
    private TextField id_patient;

    @FXML
    private TextField id_visit;

    @FXML
    private TextField date_visit;

    @FXML
    private TextField fn_user;

    @FXML
    private TextField ln_user;

    @FXML
    private TextField status;
    @FXML
    private TextArea com;

    @FXML
    public void initialize(){

    }

    public void SearchById(String id) {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {

            connection = ConnectionConfiguration.getConnection();
            statement = connection.prepareStatement("my_sql_query");
            rs = statement.executeQuery();
            while (rs.next()) {


                id_visit.setText(rs.getString(1));
                id_patient.setText(rs.getString(2));
                date_visit.setText(rs.getString(3));
                com.setText(rs.getString(4));
                fn_patient.setText(rs.getString(5));
                ln_patient.setText(rs.getString(6));
                db_patient.setText(rs.getString(7));
                fn_user.setText(rs.getString(8));
                ln_user.setText(rs.getString(9));
                status.setText(rs.getString(10));



              }
          } catch (SQLException e) {
             e.printStackTrace();
        }
     }
 }

2 个答案:

答案 0 :(得分:0)

尝试使用listView创建一个简单的fxml文件。将您感兴趣的数据放入此listView。如果您更喜欢listView以外的东西,那也没问题。 要在新窗口中打开这样的fxml,请尝试以下方法:

Stage s = new Stage();
try {
    s.setScene(new Scene(new FXMLLoader(getClass().getResource("your_fxml_name")).load()));
    s.show();
} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

您有两个操作选项:提取所有数据并将其粘贴到表格中,或者提取放在表格中的小部分,然后根据需要提取额外的内容(显示详细信息)。

我给出的例子并没有沉迷于该方法 - 它只是告诉如何将表数据(选定的行)传输到对话框(其控制器)

public class Controller {

    @FXML
    private TableView<MySearchResult> tableView;

    @FXML
    private void initialize() {
        tableView.setItems(new Database().serach("query", "query"));

        tableView.setOnMouseClicked(event -> {
            if(event.getClickCount() == 2) {
                showDetailsDialog();
            }
        });
    }

    private void showDetailsDialog() {
        MySearchResult result = tableView.getSelectionModel().getSelectedItem();
        if(result == null) {
            return;
        }

        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("details_dilaog.fxml"));

            Dialog dlg = new Dialog();
            dlg.initOwner(tableView.getScene().getWindow());
            dlg.initModality(Modality.APPLICATION_MODAL);

            dlg.getDialogPane().setContent((Parent) loader.load());
            dlg.getDialogPane().getButtonTypes().setAll(ButtonType.OK);

            DetailsDialogControler ddc = loader.getController();
            ddc.showDetailsFor(result);

            dlg.showAndWait();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我的目标是在showDetailsDialog()函数中显示逻辑。