2016-07-26 2 views
0

웨어 하우스의 데이터베이스와 상호 작용할 GUI 인터페이스를 만들고 있습니다. 응용 프로그램은 항목을 데이터베이스에 추가하고 업데이트하고 표시해야합니다. 데이터베이스에 테이블이 있고 각 테이블에 대해 JPanel을 만들어 카드 레이아웃에 넣으므로 JMenu 항목으로 탐색 할 수 있습니다. 각 JPanel은 동일한 양식을가집니다. 맨 위에는 텍스트 필드, 콤보 상자 등이있는 상자가있어 테이블에 항목을 추가합니다. 상자 아래에 1 행이있는 JTable이 있고 그 아래에 JScrollPane에있는 JTable이있어 테이블의 내용을 표시합니다. 각 열은 마지막 너비 (너비 = 100, 수정을 위해 JButton을 포함)를 제외하고 너비가 150이어야합니다. 첫 번째 JTable을 필터로 사용합니다 (예 : 첫 번째 열에 '1'이 포함 된 경우 두 번째 JTable은 '1'로 시작하는 ID가있는 항목 만 표시 함). 다른 JPanels에 대한 정확한 레이아웃을 선택하는 방법을 모르겠습니다. 잠시 동안 각 JPanel에는 BorderLayout이 있고 각 구성 요소는 가운데에 배치됩니다. 그러나 문제는 각 열의 너비를 선택할 수 없다는 것입니다.JTable 너비 레이아웃

답변

0

글쎄, 마침내 나는 내 자신의 문제를 해결했습니다. 사실 JTable을 JPanel에, JPanel을 JScrollPane에 넣어야합니다. 여기에 코드가 있습니다 :

public class Brouillon extends JFrame { 

    public Brouillon() { 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel jpContent = new JPanel(); 
     JPanel jpCards = new JPanel(); 
     jpContent.setLayout(new BoxLayout(jpContent, BoxLayout.PAGE_AXIS)); 
     CardLayout clSelect = new CardLayout(); 
     jpCards.setLayout(clSelect); 
     JButton jbTest = new JButton(); 
     jbTest.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       clSelect.next(jpCards); 
      } 
     }); 
     jpContent.add(jbTest); 
     JPanel jpContainer1 = new JPanel(); 
     JTable jtData1 = new JTable(new Object[2][3], new String[] {"1", "2", "3"}); 
     jtData1.getColumnModel().getColumn(0).setPreferredWidth(150); 
     jtData1.getColumnModel().getColumn(1).setPreferredWidth(150); 
     jtData1.getColumnModel().getColumn(2).setPreferredWidth(50); 
     JPanel jpTemp1 = new JPanel(); 
     jpTemp1.setLayout(new BorderLayout()); 
     jpTemp1.add(jtData1.getTableHeader(), BorderLayout.NORTH); 
     jpTemp1.add(jtData1, BorderLayout.CENTER); 
     JScrollPane jspData1 = new JScrollPane(jpTemp1); 
     jpContainer1.add(jspData1); 

     JPanel jpContainer2 = new JPanel(); 
     JTable jtData2 = new JTable(new Object[2][7], new String[] {"1", "2", "3", "4", "5", "6", "7"}); 
     jtData2.getColumnModel().getColumn(0).setPreferredWidth(150); 
     jtData2.getColumnModel().getColumn(1).setPreferredWidth(150); 
     jtData2.getColumnModel().getColumn(2).setPreferredWidth(150); 
     jtData2.getColumnModel().getColumn(3).setPreferredWidth(150); 
     jtData2.getColumnModel().getColumn(4).setPreferredWidth(150); 
     jtData2.getColumnModel().getColumn(5).setPreferredWidth(150); 
     jtData2.getColumnModel().getColumn(6).setPreferredWidth(50); 
     JPanel jpTemp2 = new JPanel(); 
     jpTemp2.setLayout(new BorderLayout()); 
     jpTemp2.add(jtData2, BorderLayout.CENTER); 
     jpTemp2.add(jtData2.getTableHeader(), BorderLayout.NORTH); 
     JScrollPane jspData2 = new JScrollPane(jpTemp2); 
     jpContainer2.add(jspData2); 
     jpCards.add(jpContainer2); 
     jpCards.add(jpContainer1); 
     jpContent.add(jpCards); 


     this.getContentPane().add(jpContent); 

     this.pack(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Brouillon(); 
    } 

} 
0

jTable의 경우 열 크기를 설정할 수 있습니다. 아마도 아래의 예가 도움이 될 수 있습니다. 이것이 당신이 찾고있는 것이라면 알려주세요!

TableColumn column = null; 
for (int i = 0; i < 3; i++) { 
    column = table.getColumnModel().getColumn(i); 
    if (i == 2) { 
     column.setPreferredWidth(100); //sport column is bigger 
    } else { 
     column.setPreferredWidth(50); 
    } 
}  
+0

나는 또한 그것을 사용했습니다. 그러나 스크롤 창에 테이블을 넣으면 효과가 나타나지 않습니다. 그리고 테두리 레이아웃의 중심에 놓으면, jframe의 장소. – ardayigit

+0

이 게시물을 확인해 주시겠습니까? http://stackoverflow.com/questions/953972/java-jtable-setting-column-width – Sirsendu

+0

내 문제를 해결하지 못합니다 ... – ardayigit