2016-07-26 101 views
0

我正在創建一個GUI接口來與倉庫的數據庫進行交互。應用程序需要將項目添加到數據庫,更新它們並顯示它們。我在數據庫和表中有一些表,我想創建一個JPanel,並將它們放在一個cardlayout中,這樣我就可以用JMenu項目在它們之間導航。每個JPanel具有相同的形式。在頂部,有一個包含文本框,組合框等的框以在表中添加項目。在這個盒子下面,我有一個帶有1行的JTable,在它下面,我有一個JScrollPane中的JTable來顯示錶格的內容。除了最後一列(寬度= 100,它將包含用於修改的JButton),每列的寬度必須爲150。我使用第一個JTable作爲過濾器(例如,如果第一列包含'1',那麼第二個JTable將僅顯示ID爲'1'的項目)。我不知道如何爲不同的JPanel選擇正確的佈局。目前,每個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

我也使用過,但如果我把表放在滾動窗格中,它不會生效,如果我把它放在borderlayout的中心,它將全部在jframe中的位置。 – ardayigit

+0

你能查看這篇文章嗎? http://stackoverflow.com/questions/953972/java-jtable-setting-column-width – Sirsendu

+0

它不能解決我的問題... – ardayigit