2010-11-04 89 views
2

我有兩個我希望在一個窗口中顯示的JTable。目前我能夠只顯示使用中的一個表:如何在JFrame中顯示兩個JTable

JTable table1 = makeTable(1); 
JTable table2 = makeTable(2); 
JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JScrollPane scrollPane1 = new JScrollPane(table1); 
JScrollPane scrollPane2 = new JScrollPane(table2); 
frame.add(scrollPane1, BorderLayout.CENTER); 
frame.validate(); 
frame.add(scrollPane1, BorderLayout.CENTER); 
//frame.add(scrollPane2, BorderLayout.CENTER); 
frame.setSize(700, 500); 

frame.setVisible(true); 
frame.validate(); 

什麼是使用Swing的顯示多個表,一個在另一個之上(雖然方向是irrevelant)最簡單的方法?

回答

4

您不能將兩個JTable添加到BorderLayout中的相同位置。

你可以做的是:

frame.add(scrollPane1, BorderLayout.CENTER); 
frame.add(scrollPane2, BorderLayout.SOUTH); 
frame.validate(); 
+0

謝謝,這很有幫助。有沒有更精確定位元素的方法? – 2010-11-04 18:52:22

+1

查看Layoutmanagers:http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html但我不是現有LayoutManagers的忠實粉絲。也許你可以看看JGoodies。他們甚至看起來不錯;)http://www.jgoodies.com/ – Prine 2010-11-04 19:03:23

+0

最精確的是GridBagLayout,但在使用它之前檢查其他佈局管理者,有時這是一個矯枉過正的問題。 – khachik 2010-11-04 19:38:02

2

PRINE帶的幫助下,我發現遇到了我的需求的解決方案。對於任何尋找基本方案來實現這種佈局的人:

JTable table1 = makeTable(1); 
JTable table2 = makeTable(2); 
JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
Container c = frame.getContentPane(); 
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS)); 
c.add(table1.getTableHeader()); 
c.add(table1); 
c.add(table2.getTableHeader()); 
c.add(table2); 
frame.pack(); 
frame.setVisible(true);