2017-11-29 14 views
-1

現在、JavaFxを使用してデータベースを検索するソフトウェアモジュールを作成しています。 すべてが期待どおりに機能しています。 しかし、唯一の問題は、私の結果の表では、検索の詳細がほんの少ししか表示されていないことです(UXの問題から:詳細が多く、長いテキストがあります)。 私がしたいのは、TextFieldsとTextAreaのクリックされた行のすべての詳細を含む新しいウィンドウを表示することです。 私はいくつかのチュートリアルと回答を見ましたが、残念ながら何も動作していません。 ご協力いただければ幸いです! ありがとうございます。新しいウィンドウで検索結果(JavaFx)

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

あなたの質問にもっと力を入れる必要があります。これまでに行ったこと、ログ、コードなどを表示してください。https://stackoverflow.com/help/how-to-ask – Rolo

+0

https://stackoverflow.com/に記載されているテクニックの1つを使ってみませんか?質問/ 14187963/passing-parameters-javafx-fxml? –

答えて

0

listViewを使用して簡単なfxmlファイルを作成してください。興味のあるデータをこのlistViewに配置します。あなたがlistView以外のものを好むなら、それもOKです。次の2つのアクションの選択肢を持っている

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

私はそれをしましたが、それは本当に私の問題ではありません。私はちょうど彼らが完全なデータを持つ別のウィンドウ内のすべてのデータを表示するためにデータベースからのデータを抽出するテーブルから取得する方法であるかどうかを知りたいです – GoSoft

+0

@GoSoftそれはあなたがそれを防ぐのは不明です。 –

0

: はそのような何かをしようと、新しいウィンドウで、このようなFXMLを開くには、いずれかのすべてのデータを抽出して、テーブルに貼り付け、またはあなたがテーブルに置く小さな部分を抽出します余分なオンデマンド(詳細を表示)を抽出します。

Iが与える例はアプローチにはまっていない - それは単に(選択行)のテーブルデータを転送する方法を指示ダイアログ(そのコントローラ)

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()機能です。

+0

実際には、訪問のIDを抽出し、このIDをパラメータとして2番目のコントローラの機能を呼び出した以外は、私が行ったことに対応します。行をダブルクリックすると、すべてうまくいってウィンドウが表示されますが、テキストフィールドはデータベースのデータで満たされません。なぜ私は本当に理解していない。 – GoSoft

+0

@GoSoftあなたは 'SearchById'を呼ばないからです。また、ダイアログボックスコントローラで正常に動作しません。私の例のアクションシーケンスを注意深く見直してください。 –

+0

あなたの素早い答えをありがとう、私はすべてこれをチェックします – GoSoft

関連する問題