2010-10-05 39 views
2

我有一個createUI()函數,它將JPanel加載到NORTH,SOUTH,EAST。Java Swing:相對定位和自動調整大小?

private void createUI() { 
    add(createToolBar(), BorderLayout.NORTH); 
    add(createDataView(), BorderLayout.SOUTH); 
    add(createHistoryView(), BorderLayout.EAST); 

    createMenuBar(); 

    setTitle("My Application"); 

} 

在正確的位置。每個部件顯示,但是,它們都在固定大小的JPanel。我想知道是否可以讓JPanel完全填充BorderLayout區域。

例如,createDataView()是一個帶有表格的簡單Jpanel。我希望它水平擴展,並有一個固定的高度。

private JPanel createDataView(){ 
     JPanel panel = new JPanel(); 

     String data[][] = {{"001","vinod","Bihar","India","Biology","65","First"}, 
          {"002","Raju","ABC","Kanada","Geography","58","second"}, 
          {"003","Aman","Delhi","India","computer","98","Dictontion"}, 
          {"004","Ranjan","Bangloor","India","chemestry","90","Dictontion"}, 
          {"004","Ranjan","Bangloor","India","chemestry","90","Dictontion"}}; 
     String col[] = {"Roll","Name","State","country","Math","Marks","Grade"}; 
     JTable table = new JTable(data,col); 
     table.setPreferredScrollableViewportSize(new Dimension(900,100)); 
     JTableHeader header = table.getTableHeader(); 
     header.setBackground(Color.yellow); 
     JScrollPane pane = new JScrollPane(table); 
     table.setAutoResizeMode(JTable.WIDTH); 
     table.doLayout(); 
     panel.add(pane); 
     return panel; 
}      

現在我正在依靠手動設置尺寸。但是,我會想辦法獲取當前窗口寬度,並將其設置爲如下所示。

table.setPreferredScrollableViewportSize(new Dimension(900,100)); 
+0

你有兩件東西塞進南方「細胞」......那些應該看起來相互關聯的人是怎麼樣的? – 2010-10-05 20:00:10

+0

添加了一些更多詳細信息... – KJW 2010-10-05 20:22:10

回答

1

的新JPanel的默認佈局是FlowLayout;一個GridLayout可能是您的數據視圖的替代方案。您可以比較A Visual Guide to Layout Managers中的可能性。

JPanel panel = new JPanel(new GridLayout(1, 0)); 

附件:您的setAutoResizeMode()看起來可疑; JTable.WIDTH 不可能是 只是巧合的一個有效值。 GridLayout適用於默認值JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS,但您可以嘗試其他設置。

table.setAutoResizeMode(JTable.WIDTH); 
+0

'WIDTH'繼承自'ImageObserver'(由'Component'完成),它恰好與'JTable#AUTO_RESIZE_NEXT_COLUMN'相同。 – 2010-10-06 01:50:20

+0

@Geoffrey Zheng:都是1!我應該看看。感謝澄清這一點。 – trashgod 2010-10-06 03:43:25

1

通過的borderlayout,北,南,東和西邊界,都呈現出了含面板的默認大小,但該中心擴展爲佔用所有剩餘空間。我會建議把你的createDataView放在佈局的這一部分。

+0

你的意思是把一個JPanel容器放在CENTER中,並把組件放在這裏? – KJW 2010-10-05 21:05:21

+0

是的,改變添加(createDataView(),BorderLayout.SOUTH);添加(createDataView(),BorderLayout.CENTER); – Codemwnci 2010-10-05 21:08:48

+0

這似乎已經完全覆蓋了CENTER中現有的組件。反正它並排?如果我在南方,中心需要什麼東西呢? – KJW 2010-10-05 21:11:11