2017-04-24 6 views
1

Java에서 JTable로 데이터베이스의 일부 데이터를로드하려고합니다 (Oracle의 SQL Developer 사용). 그런 다음JTable은 행 수가 두 개 이상 있음에도 불구하고 단 하나의 행만 표시합니다.

public Vector load() { 
    try { 
     Vector tableData = new Vector(); 
     Conn con = new Conn(); 
     con.openConn(); 
     con.statement = con.dbConn.createStatement(); 
     ResultSet rs = con.statement.executeQuery("Select * from Jobs"); 

     while (rs.next()) { 
      Vector<Object> row = new Vector<Object>(); 
      row.add(rs.getString("Job_ID")); 
      row.add(rs.getString("Job_Title")); 
      row.add(rs.getString("Parent_Job_ID_1")); 
      row.add(rs.getString("Parent_Job_ID_2")); 
      row.add(rs.getString("Description")); 
      tableData.add(row); 
     } 

     con.closeConn(); 
     return tableData; 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
} 

내가 편집기로했습니다 JTable의로를 채우는 시도 : 나는 벡터의 벡터의 데이터베이스에서 데이터를 넣어,이 내가라는 클래스 DBJobs에 넣어 내 부하 방법 다른 클래스에서 :

private void populateJobsTable() { 
    Vector<String> tableHeader = new Vector<String>(); 
    tableHeader.add("Job ID"); 
    tableHeader.add("Job Name"); 
    tableHeader.add("Parent Job ID 1"); 
    tableHeader.add("Parent Job ID 2"); 
    tableHeader.add("Description"); 

    Vector tableData = dbJobs.load(); 
    tblJobs.setModel(new DefaultTableModel(tableData, tableHeader)); 
} 

그러나 내가 볼 수있는 것은 테이블의 1 행 데이터입니다. Vector에있는 데이터의 수와 테이블에있는 행 수를 모두 인쇄 해 보았습니다. 데이터베이스에있는 데이터의 양은 모두 49입니다. 그렇다면 왜 내 테이블에 1 개의 데이터 만 표시됩니까?

편집 : 모두의

tblJobs = new javax.swing.JTable(); 
tblJobs.setFont(new java.awt.Font("Tempus Sans ITC", 0, 14)); // NOI18N 
    tblJobs.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {null} 
     }, 
     new String [] { 
      "Job Name" 
     } 
    ) { 
     Class[] types = new Class [] { 
      java.lang.String.class 
     }; 
     boolean[] canEdit = new boolean [] { 
      false 
     }; 

     public Class getColumnClass(int columnIndex) { 
      return types [columnIndex]; 
     } 

     public boolean isCellEditable(int rowIndex, int columnIndex) { 
      return canEdit [columnIndex]; 
     } 
    }); 
    tblJobs.setPreferredSize(new java.awt.Dimension(225, 16)); 
    jScrollPane5.setViewportView(tblJobs); 
    if (tblJobs.getColumnModel().getColumnCount() > 0) { 
     tblJobs.getColumnModel().getColumn(0).setResizable(false); 
    } 
+1

테이블은 어떻게 표시됩니까? 더미 데이터를 데이터베이스에서로드하는 대신 사용 해봤습니까? – MadProgrammer

+0

편집기에서 테이블을 만들었으므로 코드에 setVisible (true) 메서드가 없습니다. 예, 더미 데이터를 사용하여 시도했지만 여전히 1 행만 표시합니다. – Grandevox

+1

[Minimal, Complete, Verifiable example] (http://stackoverflow.com/help/mcve) – MadProgrammer

답변

1

먼저 MCVE되지 않습니다 : 나는이 JTable로를 만들기 위해 생성 된 코드라고 생각합니다. 이 코드는 어떻게 완성 되었습니까? 이 코드를 어떻게 컴파일하고 테스트 할 수 있습니까? 내 의견을 읽지 않았습니까 ???

나는 IDE를 제거하고 수동으로 GUI를 만드는 방법을 배우는 것이 좋습니다. 커스텀 TableModel로 JTable를 생성하는 IDE의 포인트는 무엇입니까? 이 코드는 사용자가 직접 TableModel을 만들고 IDE에서 만든 모델을 대체 할 setModel (...) 메서드를 사용하기 때문에 완전히 쓸모가 없습니다.

tblJobs.setPreferredSize(new java.awt.Dimension(225, 16)); 

위의 코드는 의심스러워 보입니다. Swing 구성 요소에 기본 크기를 설정하면 안됩니다. 테이블의 크기는 한 번에 한 행만 표시하는 것처럼 보입니다.

문제가되지 않는다면 적절한 MCVE이 게시 될 때까지 더 이상의 제안이 없습니다. 모든 질문에는 MCVE이 있어야합니다. 그래서 우리는 당신이 무엇을 할지도 모르는 지 짐작할 시간을 가지지 않습니다.

+0

죄송 합니다만 요청한 MCVE 코드를 어디서 얻을 수 있는지 잘 모릅니다. IDE를 사용하여 GUI를 만드는 이유는 UI를 만드는 전문가 (또는 코딩 중)가 아니기 때문에 내가 넣은 각 객체의 위치를 ​​설정하고 싶지 않기 때문입니다. 내 프레임에 많은 객체가 없으면 수동으로 GUI를 만들려고합니다.그 말로, 내가 의심스러운 코드를 제거하려고 시도하고 그것은 효과가! 이제 테이블에 데이터베이스에있는 모든 데이터가 표시됩니다! 고맙습니다. 제안을 해주셔서 감사 드리며, 모든 사람들이 저의 어리 석음을 혼란 스럽거나/좌절시키는 경우에 사과드립니다. – Grandevox

+0

@Grandevox, '내가 IDE를 사용했던 이유'- IDE의 문제점은 Java/Swing이 아닌 IDE를 배우는 것입니다. . '나는 각 객체의 위치를 ​​설정하고 싶지 않습니다 .' - 결코 객체의 위치를 ​​설정해서는 안됩니다. Swing은 "레이아웃 관리자"와 함께 사용하도록 설계되었습니다. 각 레이아웃 관리자의 규칙에 따라 구성 요소의 크기/위치를 설정하는 것은 레이아웃 관리자 작업입니다. 시작하기위한 자세한 정보와 작업 예제는 [레이아웃 관리자] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)의 스윙 튜토리얼을 참조하십시오. – camickr

+0

좋습니다. 그것에 대해 자세히 알아 보겠습니다. 의견을 보내 주셔서 감사합니다! – Grandevox