在全屏幕上使用GridBagLayout构建组件

时间:2012-09-07 00:58:03

标签: java swing awt layout-manager gridbaglayout

我的问题是我想为我的项目制作更复杂的(对我来说)图形界面。首先,我使用全屏模式,代码如下:

public class MainFrame extends JFrame
{
...
private Container container;
private GridBagLayout gbl;

public MainFrame()
{
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice dev = env.getDefaultScreenDevice();
dev.setFullScreenWindow(this);
setLayoutManager();
}
...
}

一切都好。 我要做的下一步是添加两个JPanel。我想使用的布局管理器是GridBagLayout。

private void setLayoutManager()
{
container = getContentPane();
gbl = new GridBagLayout();
container.setLayout(gbl);
}

private void addMenu()
{
MenuBar menu = new MenuBar();
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.ipady = 0;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.weighty = 0.05;
gbl.setConstraints(menu, gbc);
container.add(menu);
}

private void addWorkArea()
{
WorkArea area = new WorkArea();
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbl.setConstraints(area, gbc);
container.add(area);
}

结果如下:

enter image description here

以下是my project

为什么顶部有条带?

当我点击并拖动时,所有应用程序都在移动。请帮我。对我来说,填补所有空间摆脱JFrame移动非常重要。

1 个答案:

答案 0 :(得分:3)

当我告诉你问题是什么时,你会笑的。

Java,出于任何理由,在布局内容时允许框架插入。也就是说,它仍然认为有一个标题栏和框架边框。

这个修复虽然非常复杂......

MainFrame构造函数中,您需要在执行任何其他操作之前调用setUndecorated(true) ...

public MainFrame() {
    setUndecorated(true); // <-- Add me
    setFullScreen();
    setResizable(false);
    setTitle("Program");
    setLayoutManager();
    addMenu();
    addWorkArea();
}

我知道,非常复杂(插入讽刺:P - 严重的是,当它工作时我感到惊讶)