0

我在使用 GridBagLayout 时遇到了一些问题。抱歉无法发布图片。这就是我想要的:

  0 1 2 3 4
0 1 1 1 1 2
1 1 1 1 1 2
2 1 1 1 1 2
3 1 1 1 1 4
4 3 3 3 3 4

这就是我得到的

  0 1 2 3 4
0 1 1 1 1 2
1 1 1 1 1 2
2 1 1 1 1 2
3 1 1 1 1 2
4 3 3 3 3 4

使用以下代码:

    JPanel mainPanel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.gridheight = 4;
    gbc.gridwidth = 4;
    gbc.gridx = 0;
    gbc.gridy = 0;
    JPanel panelOne = new JPanel();
    //add some content
    mainPanel.add(panelOne, gbc);

    gbc.gridheight = 3;
    gbc.gridwidth = 1;
    gbc.gridx = 4;
    gbc.gridy = 0;
    JPanel panelTwo = new JPanel();
    //Add some content
    mainPanel.add(panelTwo, gbc);

    gbc.gridheight = 1;
    gbc.gridwidth = 4;
    gbc.gridx = 0;
    gbc.gridy = 4;
    JPanel panelThree = new JPanel();
    //Add some content
    mainPanel.add(panelThree, gbc);

    gbc.gridheight = 2;
    gbc.gridwidth = 1;
    gbc.gridx = 4;
    gbc.gridy = 3;
    JPanel panelFour = new JPanel();
    //Add some content
    mainPanel.add(panelFour, gbc);

    mainFrame.setContentPane(mainPanel);

用不同的参数尝试了很多次,添加/删除了 weightx 和 weighty,但没有任何成功。

这是一个变体,只需复制和粘贴:

 package problem;

import java.awt.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Problem {

    public static void main(String[] args) {
        createMainField();
    }

public static void setDamnedSize(Component component, Dimension size) {
    component.setMinimumSize(size);
    component.setMaximumSize(size);
    component.setPreferredSize(size);
    component.setSize(size);
}

public static JPanel createOneButton(String name) {
    JPanel returnPanel = new JPanel(new GridLayout(0, 1));
    JButton button = new JButton(name);
    returnPanel.add(button);
    return returnPanel;
}

public static JFrame createMainField() {
    JFrame mainFrame = new JFrame("Space Race:The Game");
    setDamnedSize(mainFrame, new Dimension(800, 800));
    mainFrame.setLocationRelativeTo(null);
    mainFrame.setExtendedState(Frame.MAXIMIZED_BOTH);

    JPanel mainPanel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 4;
    gbc.weighty = 4;
    gbc.gridheight = 4;
    gbc.gridwidth = 4;
    gbc.gridx = 0;
    gbc.gridy = 0;
    JPanel panelOne = new JPanel(new GridLayout(1, 0));
    panelOne.setBackground(Color.DARK_GRAY);
    panelOne.add(createOneButton("One"));
    mainPanel.add(panelOne, gbc);

    gbc.weightx = 3;
    gbc.weighty = 1;
    gbc.gridheight = 1;
    gbc.gridwidth = 3;
    gbc.gridx = 4;
    gbc.gridy = 0;
    JPanel panelTwo = new JPanel(new GridLayout(0, 1));
    panelTwo.setBackground(Color.LIGHT_GRAY);
    panelTwo.add(createOneButton("Two"));
    mainPanel.add(panelTwo, gbc);

    gbc.weightx = 4;
    gbc.weighty = 1;
    gbc.gridheight = 1;
    gbc.gridwidth = 4;
    gbc.gridx = 0;
    gbc.gridy = 4;
    JPanel panelThree = new JPanel(new GridLayout(1, 0));
    panelThree.setBackground(Color.GRAY);
    panelThree.add(createOneButton("Three"));
    mainPanel.add(panelThree, gbc);

    gbc.weightx = 1;
    gbc.weighty = 2;
    gbc.gridheight = 2;
    gbc.gridwidth = 1;
    gbc.gridx = 4;
    gbc.gridy = 3;
    JPanel panelFour = new JPanel(new GridLayout(0, 1));
    panelFour.setBackground(Color.decode("#A0A0A0"));
    panelFour.add(createOneButton("Four"));
    mainPanel.add(panelFour, gbc);

    mainFrame.setContentPane(mainPanel);
    mainFrame.setVisible(true);
    return mainFrame;
}

}

4

0 回答 0