我目前正在开发一个软件模块,包括使用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();
}
}
}
答案 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()
函数中显示逻辑。