我试图创建一些用户界面,但不知道如何使用 LayoutManger
为了它。
像在图像中显示紫色的颜色成分有固定的宽度和高度,但粘在角落里。8和4具有固定高度和可变高度,2和6具有固定高度和可变宽度。中间组件(9)需要可变的宽度和高度。
这8个组件的工作方式类似于边框,中间的组件需要根据父组件大小调整大小。我可以用空布局编码绝对位置。但我建议不要使用空布局。
我怎么能用一个布局管理器来完成这个任务呢?我需要使用多个布局吗?
更新
我试过一些 GridBagLayout
正如安德鲁的建议,但我仍然需要一些帮助来了解它是如何工作的。这是我的密码
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GridLayoutTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel jPanel1 = new JPanel();
jPanel1.setLayout(new GridBagLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button;
GridBagConstraints c = new GridBagConstraints();
button = new JButton("1");
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.gridx = 0;
c.gridy = 0;
jPanel1.add(button, c);
button = new JButton("2");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridx = 1;
c.gridy = 0;
jPanel1.add(button, c);
button = new JButton("3");
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.FIRST_LINE_END;
c.gridx = 2;
c.gridy = 0;
jPanel1.add(button, c);
button = new JButton("4");
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.LINE_START;
c.weighty = 1.0;
c.gridx = 0;
c.gridy = 1;
jPanel1.add(button, c);
//Panel
JPanel panel = new JPanel();
panel.setBackground(Color.green.darker());
c.fill = GridBagConstraints.BOTH;
c.weightx = 0.0;
//c.weightx = 1.0;
c.gridx = 1;
c.gridy = 1;
jPanel1.add(panel, c);
button = new JButton("5");
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.LINE_END;
c.weighty = 1.0;
c.gridx = 2;
c.gridy = 1;
jPanel1.add(button, c);
button = new JButton("6");
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.LAST_LINE_START;
c.gridx = 0;
c.gridy = 2;
jPanel1.add(button, c);
button = new JButton("7");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridx = 1;
c.gridy = 2;
jPanel1.add(button, c);
button = new JButton("8");
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.LAST_LINE_END;
c.gridx = 2;
c.gridy = 2;
jPanel1.add(button, c);
frame.add(jPanel1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setSize(500, 500);
frame.setVisible(true);
}
}
3条答案
按热度按时间9udxz4iz1#
另一个选择是jgoodies formlayout。从基本上永远以来,我一直在使用jformdesigner来满足我所有的布局需求。它覆盖了我95%的用例。剩下的5%是边界布局和绝对定位(空布局)。
wlsrxk512#
解决复杂计算任务的一个常见策略是将它们分解为小的、定义良好的可管理任务。分而治之。这也适用于gui:您可以将设计分解为小的、易于布局的容器。在这种情况下,可以通过使用
BoxLayout
以及BorderLayout
:yiytaume3#
我创建了以下gui。
我为网格的每个元素设置了所有六个gridbagstraints(锚定、填充、gridx、gridy、weightx、weighty)。这样,我可以更容易地跟踪每个元素的值。
下面是我使用的完整的可运行代码。换句话说,一个最小的,可复制的例子。