我正在尝试构建以下可调整大小的JPanel:
+-----------------------+
| |
| |
| |
| |
| |
| JScrollPane |
| (containing a |
| JTable) |
| |
| |
| |
| |
| |
+-----------+-----------+
| button1 | b2 |
+-----------+-----------+
我希望button1和b2始终具有相同的宽度,这意味着当整个组件水平调整大小时,两个按钮都应该获得或失去相同的宽度。按钮本身之间以及按钮和面板边框之间不应有空格。也就是说,按钮应始终占用所有可用的水平空间。请注意,按钮上的文字长度不同。
当组件垂直调整大小时,我希望JScrollPane获得新的高度,而带按钮的行应始终保持相同的高度(基本上是button1.getPreferedSize().getHeight()
)。
我尝试过一大堆不同的LayoutManagers。我得到的最接近的是将两个按钮放在一个新的JPanel中,并将该面板的LayoutManger设置为new GridLayout(0,2)
。这至少保持了两个按钮的均匀宽度,并填满了所有水平空间。但是,当面板垂直调整大小时,它们仍会改变高度。
使用其他LayoutManagers(例如GroupLayout),我可以通过链接按钮(groupLayout.linkSize(button1, b2)
)来保持相同的宽度,但无法让它们填充整个水平空间。
实现这一目标的最佳方法是什么?应该使用什么是LayoutManager?
答案 0 :(得分:3)
我强烈建议您查看MigLayout。它是一个非常灵活且易于使用的布局管理器。
如果您不想使用它,我建议使用BorderLayout创建一个JPanel,并将scrollpane放在borderlayout的中心。然后,使用GridLayout创建另一个JPAnel,其中包含1行和2列,并将两个按钮添加到该行。然后,使用borderlayout将该面板添加到JPanel的南部区域。
代码看起来像这样:
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
JPanel tablePanel = new JPanel();
JScrollPane jsp = new JScrollPane(new JTable());
tablePanel.add(jsp);
mainPanel.add(jsp, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1, 2));
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
buttonPanel.add(button1);
buttonPanel.add(button2);
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
this.add(mainPanel);