2012-09-07 35 views
2

我的问题是我想为我的项目制作更复杂的(对我来说)图形界面。首先,我使用以下代码的全屏模式:在全屏幕上使用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移动是非常重要的。

+0

1)为更好地帮助更快,张贴[SSCCE](http://sscce.org/)。 2)考虑使用嵌套布局。 3)在问题中添加问号。 –

+0

设置布局后尝试设置全屏。也尝试设置布局到框架本身,而不是内容页面 –

+2

我知道相当于“不这样做”的答案通常是不受欢迎的,但是... GridBagLayout必须是最难理解/使用。 有许多易于使用的布局管理器。例如,看看MigLayout。或者至少使用嵌套的BorderLayouts。 – GreyBeardedGeek

回答

3

你要当我告诉你问题是什么笑......

Java中,什么都原因,允许帧插图时,它的布局内容。也就是说,它仍然认为有一个标题栏和框架边框。

解决方法是窘况复杂,但...

在你MainFrame构造函数,你需要调用setUndecorated(true)你做任何事情之前...

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

我知道,窘况复杂(插入嘲讽:P - 严重时,我惊讶自己,当它的工作)

+0

你的意思是它不是通过调用'pack()'或'validate()'来修复的吗?顺便说一句 - 你下载的RAR?注意到您的评论。 'compilable'.. –

+0

我想你的意思是他需要调用'setUndecorated(true);'而不是'setUndecorated(false);'... –

+0

非常感谢,这很好。我也很惊讶:] – daniio