swing java的布局
我想创建一个这样的布局 这是我的代码不起作用:swing java的布局,java,swing,awt,layout-manager,Java,Swing,Awt,Layout Manager,我想创建一个这样的布局 这是我的代码不起作用: outer.setLayout(new BorderLayout()); panel1 = new JPanel(); ... outer.add(panel1, BorderLayout.PAGE_START); outer.add(panel2, BorderLayout.LINE_START); outer.add(panel3, BorderLayout.CENTER); outer.add(panel4, BorderLayout.
outer.setLayout(new BorderLayout());
panel1 = new JPanel();
...
outer.add(panel1, BorderLayout.PAGE_START);
outer.add(panel2, BorderLayout.LINE_START);
outer.add(panel3, BorderLayout.CENTER);
outer.add(panel4, BorderLayout.LINE_END);
outer.add(panel5, BorderLayout.PAGE_END);
注:上面的面板5应包含2个以上的面板
在上面的代码中,我可以将它们放在正确的位置,但是中间的一个嵌板3非常大,因此所有其他嵌板都被挤压到一边
我怎样才能得到这些尺寸的一些比例,如2:10:2等
我应该更改布局吗?如果您想这样做,使用BorderLayout是一个好的开始。所以,是的,我在这里也会使用BorderLayout 但是,您应该更改添加面板的方式:
outer.add(panel1, BorderLayout.NORTH);
outer.add(panel2, BorderLayout.WEST);
outer.add(panel3, BorderLayout.CENTER);
outer.add(panel4, BorderLayout.EAST);
//Create a additional Panel for the two at the bottom
JPanel southPanelContainer = new JPanel(new BorderLayout());
southPanelContainer.add(panel5, BorderLayout.EAST);
southPanelContainer.add(panel6, BorderLayout.WEST);
outer.add(southPanelContainer, BorderLayout.SOUTH);
这看起来应该已经有点像样了,但是如果您仍然想改变它的外观,那么您应该向这些面板添加一些组件。布局管理器将自动调整面板大小,使所有内容都适合 对于类似表格/矩阵的布局,使用a,其中一些单元格占用多个插槽。
BorderLayout用于一个中央面板,周围有一些边框面板
public MainFrame() {
JPanel outer = new JPanel(new GridBagLayout());
outer.setPreferredSize(new Dimension(800, 600));
JPanel panel1 = createPanel("1");
JPanel panel2 = createPanel("2");
JPanel panel3 = createPanel("3");
JPanel panel4 = createPanel("4");
JPanel panel5 = createPanel("5");
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 3; // col span
c.gridheight = 1;
outer.add(panel1, c);
c.weightx = 0.33;
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 1;
outer.add(panel2, c);
c.weightx = 0.33;
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 1;
outer.add(panel2, c);
c.weightx = 0.33;
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 1;
outer.add(panel3, c);
c.weightx = 0.33;
c.gridx = 3;
c.gridy = 1;
c.gridwidth = 3;
c.gridheight = 1;
outer.add(panel4, c);
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 3;
c.gridheight = 1;
outer.add(panel5, c);
setContentPane(outer);
pack();
}
private JPanel createPanel(String title) {
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createTitledBorder(title));
setPreferredSize(new Dimension(300, 300));
return panel;
}
有一个GridBagConstraints构造函数设置所有字段。然而,这里的可读性不太好
它也是一个非常容易出错的布局。看起来像一个边界布局,页面末尾有一个GridLayout1,0。中心外面板的首选尺寸是多少?可能最好开始使用GridBagLayout。这需要一些时间来适应,但你可以用它做你想做的。我们已经确定了一些尺寸比例,例如2:10:2,所有3个面板都将定制喷漆。但是,如果在面板中绘制的图形元素的空间宽度或高度变小或变大,该怎么办?例如,当变得更薄时,图形是否应该变得更薄,但在更改纵横比时保持相同的高度?我怀疑实现这一点的最佳方法是在绘画时只使用一块面板,并将空间分成2:10:2,但我的问题的答案可能会提出一种不同的方法。请注意,程序员需要跳过一些障碍。。。。根据可用空间的比例获得布局以分配空间。@andrewhompson这是一个国际象棋游戏。中间的大面积是为董事会。黄色/绿色区域是黑色/黄色区域,底部两个区域是两名玩家的死角。问题是我不想在这些面板1-5中添加任何其他内容。我想在他们身上画。。。。因此,所有这些都非常小:-那么您现在可能应该使用Netbeans GUI Builder或其他任何名称;更正了一点。确实不是最简单的布局。我几乎推荐NetBeans及其布局编辑器和免费布局。