【发布时间】:2014-09-30 01:08:13
【问题描述】:
我有这段代码:
frame.setTitle("SideScroller");
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
Dimension dim = new Dimension(1000, 500);
frame.setContentPane(gamePanel); //gamePanel is an extended JPanel
gamePanel.setPreferredSize(dim);
frame.pack();
在我运行这段代码并用部分 50x50p 填充 gamePanel 后,应该完全填充 gamePanel 和 frame,屏幕的右侧和底部有一些空的像素行。
frame.getSize(); //gives us: 1016 x 539
frame.getInsets(); //gives: Top: 31 | Left: 8 | Bottom: 8 | Right: 8
结果图片:
如您所见,JFrame 中仍有一些空房间。
填写gamePanel的代码:
//Fill the panel with landscape
//One part : 50x50 px
//Panel : 1000x500 px
//Width : 20 prts
//Height : 10 prts
@Override
public void paint(Graphics g){
super.paint(g);
for(int i = 0; i < 20; i++){
for(int j = 0; j < 10; j++){
//Decide which landscape-img should be used
switch(levelOne[j][i]){
case 0:g.drawImage(new ImageIcon("resources\\landscape-img\\air.png")
.getImage(), 50 * i, 50 * j, null);
break;
case 1:g.drawImage(new ImageIcon("resources\\landscape-img\\ground.png")
.getImage(), 50 * i, 50 * j, null);
break;
}
}
}
g.dispose();
}
我不明白为什么frame 没有填满。希望有人可以帮助我!
【问题讨论】:
-
似乎问题出在那些 JFrame 插图上。您设置的首选大小与您返回的大小值之间的差异正是插图的内容。所以也许你需要创建一个值为 0 的 Insets 并调用 JFrame.setInsets?
-
@ControlAltDel 正在尝试,感谢您的建议。
-
我还发现,有时 UI 表现得像这样,它可以帮助开始倒退......而不是使用您的面板调用 setContentPane,如何将其添加到预先存在的contentPane(具有正确的布局),看看它的样子?
-
@ControlAltDel 好像没有
setInsets()...? -
@ControlAltDel 我不太明白你的第二个建议。你的意思是我应该用 1000x500 的图片创建一张图片并将其放在 contentPane 中,还是其他什么?