GridBagLayout创建非常小的面板

时间:2016-10-23 02:00:22

标签: java swing jpanel layout-manager gridbaglayout

我正在尝试将JFrame的布局设置为网格包布局。我想基本上看起来像4个相同大小的网格,但底部2合并为一个面板。我正在为每个人添加JPanel。但是,我在JFrame的中间得到3个小网格,尺寸不合适。它看起来像这样。

我的代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Hangman extends JPanel{
    private String word;
    private JPanel hA, gL, letters;

    public void setupLayout(JFrame window){
            window.setLayout(new GridBagLayout());
            GridBagConstraints c = new GridBagConstraints();

            hA = new JPanel();
            hA.setBackground(Color.blue);
            c.fill = GridBagConstraints.BOTH;
            c.gridx = 0;
            c.gridy = 0;
            window.add(hA, c);

            gL = new JPanel();
            gL.setBackground(Color.green);
            c.fill = GridBagConstraints.BOTH;
            c.gridx = 1;
            c.gridy = 0;
            window.add(gL, c);

            letters = new JPanel();
            letters.setBackground(Color.black);
            c.fill = GridBagConstraints.BOTH;
            c.weightx = 1.0;
            c.gridx = 0;
            c.gridy = 1;
            c.gridwidth = 2;
            window.add(letters, c);
    }
        public void startWindow(){
            JFrame window = new JFrame();
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            int screenHeight = (int) screenSize.getHeight();
            int windowHeight = (int) ((screenHeight / 4) * 3);
            window.setSize(windowHeight, windowHeight);
            window.setLocationRelativeTo(null);
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setupLayout(window);
            window.setVisible(true);
    }

    public void startGame(){
            Prep prepare = new Prep();
            word = prepare.findWord(true);
            startWindow();
    }

    public static void main(String[] args){
                Hangman start = new Hangman();
            start.startGame();
    }
}

准备工作并不是很重要。它只需要一个文本文件中的随机单词。我无法看到它会如何影响布局。回顾一下,我需要做到这一点,因此4个网格空间中的每一个都跨越窗口的四分之一,然后使底部的2个单元格与添加到每个网格中的JPanel合并。任何帮助表示赞赏。提前谢谢。

编辑:  我需要将它们的重量设置为1.它已经解决了。

1 个答案:

答案 0 :(得分:2)

GridBagLayout以其首选大小显示每个组件。由于您没有向面板添加任何组件,因此您只需看到一个小面板。

如果您希望面板填充可用空间,则需要使用约束。

阅读How to Use GridBagLayout上Swing教程中的部分,了解更多信息和工作示例。你会想看看" fill"和" weightx / weighty"约束

  

然后将底部2个单元格合并

您还需要查看" gridwidth / gridheight"约束