我正在尝试将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.它已经解决了。
答案 0 :(得分:2)
GridBagLayout以其首选大小显示每个组件。由于您没有向面板添加任何组件,因此您只需看到一个小面板。
如果您希望面板填充可用空间,则需要使用约束。
阅读How to Use GridBagLayout上Swing教程中的部分,了解更多信息和工作示例。你会想看看" fill"和" weightx / weighty"约束
然后将底部2个单元格合并
您还需要查看" gridwidth / gridheight"约束