我需要这样安排组件:在第一行中有 2 个按钮,占据窗口整个高度的一半,它们的宽度比是 1:2,在第二行中一切都相同,但宽度比是2:1。我使用 GridBagLayout 来布局组件,因为......我发现它对于我的应用程序布局来说足够简单和灵活,但它并不像我想象的那样工作。
我写了代码:
Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints layout = new GridBagConstraints();
JButton openButton = new JButton(OPEN_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(openButton, layout);
JButton saveButton = new JButton(SAVE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 0.5;
layout.gridx = 1;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(saveButton, layout);
JButton reverseButton = new JButton(REVERSE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 1;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(reverseButton, layout);
JButton calculateButton = new JButton("Рассчитать");
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 0.5;
layout.gridx = 1;
layout.gridy = 1;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(calculateButton, layout);
我的期望: 图1
最终输出: 图像 2
我尝试从 JPanel 创建行并在其中放置按钮,但最终输出与预期相差甚远。代码:
Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints layout = new GridBagConstraints();
JPanel panel1 = new JPanel();
panel1.setBackground(Color.BLUE);
panel1.setLayout(new GridBagLayout());
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 1;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(panel1, layout);
JButton openButton = new JButton(OPEN_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 1;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel1.add(openButton, layout);
JButton saveButton = new JButton(SAVE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 1;
layout.gridx = 1;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel1.add(saveButton, layout);
JPanel panel2 = new JPanel();
panel2.setBackground(Color.GREEN);
panel1.setLayout(new GridBagLayout());
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 1;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 1;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(panel2, layout);
JButton reverseButton = new JButton(REVERSE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 1;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel2.add(reverseButton, layout);
JButton calculateButton = new JButton("Рассчитать");
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 1;
layout.gridx = 1;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel2.add(calculateButton, layout);
最终输出:图像 3
您能告诉我如何配置所需的组件排列吗?
我
JPanel没有为第二个安装布局管理器,因为......把名字弄混了JPanel。现在我已经解决了所有问题,并且似乎有效。因此,工作版本是第二个版本,我在其中
JPanel每行都使用了它,并且已经确定了组件的权重。因为
JButton位于不同的面板中,它们的权重不会相互影响。