2010-10-05 218 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