2017-11-29 5 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/에 설명 된 기술 중 하나를 사용하지 않는 이유는 무엇입니까? 질문/14187963/passing-parameters-javafx-fxml? –

답변

0

listView를 사용하여 간단한 fxml 파일을 만들어보십시오. 관심있는 데이터를이 listView에 배치합니다. listView 이외의 다른 것을 선호한다면 괜찮습니다. 당신은이 작업 옵션을

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를 열려면하거나 모든 데이터를 추출하고 테이블에 붙여 또는 테이블에 넣어 작은 부분을 추출 , 주문형 특별 요청 (디스플레이 세부 정보)을 추출 할 수 있습니다.

내가 접근에 중독되지 않은 줄의 예 - 단순히 대화에 테이블 데이터 (선택된 행)을 전송하는 방법을 알려줍니다 (그 컨트롤러)

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를 매개 변수로 사용하여 두 번째 컨트롤러의 기능을 호출했습니다. 행을 두 번 클릭하면 내 창을 모두 얻을 수 있지만 텍스트 필드는 데이터베이스의 데이터로 채워지지 않습니다. 나는 왜 그런지 이해하지 못한다. – GoSoft

+0

@GoSoft 당신은'SearchById'를 호출하지 않기 때문에. 또한 대화 상자 컨트롤러로 제대로 작동하지 않습니다. 예제에서 액션 순서를 신중하게 검토하십시오. –

+0

빠른 대답 감사합니다. 나는이 모든 것을 검사 할 것입니다. – GoSoft