Java Swing:相对定位和自动调整大小?

Java Swing:相对定位和自动调整大小?,java,swing,Java,Swing,我有一个createUI()函数,它将JPanel加载到北、南、东 private void createUI() { add(createToolBar(), BorderLayout.NORTH); add(createDataView(), BorderLayout.SOUTH); add(createHistoryView(), BorderLayout.EAST); createMenuBar(); setTitle("My Applicat

我有一个createUI()函数,它将JPanel加载到北、南、东

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));

JPanel
的默认布局为
FlowLayout
GridLayout
可能是数据视图的备选方案。您可以在中比较各种可能性

增编:你看起来很可疑
JTable.WIDTH
不太可能恰好是一个有效值
GridLayout
可以很好地使用默认的
JTable。自动调整后续列的大小,但您可以尝试其他设置

table.setAutoResizeMode(JTable.WIDTH);

使用borderlayout时,北、南、东和西边界均采用包含面板的默认大小,但中心将扩展到“占据所有剩余空间”。我建议将您的createDataView放在布局的这一部分。

您在南部的“单元格”中填充了两个内容“…它们之间的关系如何?您的意思是将一个JPanel容器放在中间,然后将组件放在这里吗?是的,更改add(createDataView(),BorderLayout.SOUTH);要添加(createDataView(),BorderLayout.CENTER);这似乎已经完全覆盖了中心的现有组件。不管怎样,要并排走吗?如果我需要一些在南部的东西呢,中心?哦,对不起,你没有提到你已经在中心有组件了。在这种情况下,您可能需要查看JTable上的minSize、preferredSize和maxSize方法。
WIDTH
继承自
ImageObserver
(由
组件实现),它恰好与
JTable#AUTO_RESIZE_NEXT_COLUMN
@Geoffrey Zheng:1!我应该看看。谢谢你澄清这一点。
table.setAutoResizeMode(JTable.WIDTH);