在GridBagLayout中使用JInternalFrames的所有可用空间

时间:2013-11-22 14:21:46

标签: java swing layout gridbaglayout

我想构建以下布局:

+--------------+-------+
|              |       |
|              |   O   |
|    GAME      |   P   |
|              |   T   |
|              |       |
+--------------+-------+
|                      |
|      CONDITIONS      |
|                      |
+--------------+-------+

虽然每个组件应该是一个框架

我决定使用GridBagLayout,它有点有用: What i have so far

问题非常明显:框架是一种小型的方式

以下是其中一个框架的示例代码(它们几乎完全相同):如您所见,它们什么都不做

public class Game extends JInternalFrame {

    public Game(){
        super("Game");
    }

}

以下是我如何构建布局:

//set dimension (x, y)
this.setSize(900, 600);
//deny resizing
this.setResizable(false);
//set position (x: top, y: left)
this.setLocation(300, 300);
[....]
    this.options = new Options();
    this.conditions = new Conditions();
    this.game = new Game();
    this.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    c.fill = GridBagConstraints.VERTICAL;
    c.gridx = 1;
    c.gridy = 0;
    this.add(this.options, c);

    c.fill = GridBagConstraints.BOTH;
    c.gridx = 0;
    c.gridy = 0;

    this.add(this.game, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 2;

    this.add(this.conditions, c);

    this.options.setVisible(true);
    this.conditions.setVisible(true);
    this.game.setVisible(true);

所以我的问题是

1)如何让帧使用窗口的整个空间 2)如何以不同的大小制作它们(因为this.options.setSize(...)不起作用?)

PS:以下是完整代码:http://pastebin.com/TSWyyi7v

1 个答案:

答案 0 :(得分:1)

根据你的照片,BorderLayout会更容易:

setLayout( new BorderLayout() );
add(game, BorderLayout.CENTER);
add(options, BorderLayout.EAST);
add(conditions, BorderLayout.SOUTH);