在JFrame中使用JPanel的java无法正确调整大小或移动
感谢您花时间阅读本文。我希望它不会令人困惑,如果需要任何其他信息,请告诉我
问题: 我正在制作一个蛇形游戏,我创建了一个JFrame,然后添加了JPanel。如果我不在JFrame中设置它的大小,它的大小将为100x20。当我设置它的大小时,它保持在设置的尺寸上。但是,如果我打包()它,当我在JPanel中定义大小时,它会收缩到100 x 20左右。我也设定了界限,运气不好。我使用了FlowLayout()和BorderLayout()也没有成功。现在我的游戏运行正常,除了框架外,没有任何问题。它会切断两边,除非我做一些我不想做的体操
目标: 我希望能够有正确的框架大小,以我的宽度和高度指定,并有面板向下移动了一点,以增加游戏的文字空间,所以它不会阻止任何东西
我花了几天时间在这件事上,基本上感到困惑和慌乱,到目前为止,我还没有取得任何成功
JFrame类:
public class main extends JFrame {
/**
* @param args the command line arguments
*/
public main(){
Board game = new Board();
setLayout(new BorderLayout(0, 50));
setSize(game.getGameWidth(), game.getGameHeight());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setTitle("BlockRunner");
getContentPane().add(game);
setResizable(false);
setVisible(true);
}
}
我的董事会班级:
public class Board extends JPanel implements ActionListener, KeyListener{
private int width = 600;
private int height = 400;
Board(){
addKeyListener(this);
setFocusable(true);
setBackground(Color.LIGHT_GRAY);
setSize(width, height);
InitGame();
}
}
我愿意尝试任何有人愿意为我做的事情。 谢谢你抽出时间
编辑1:(由于用户的回答。) 使用setPerferredSize()、setMinmumSize()和setMaximumSize()不会影响此操作的结果
# 1 楼答案
我知道你说使用
setPreferredSize()
不会影响结果,但另外两个人和我自己似乎认为应该解决这个问题。你能试试下面的方法吗主要改变如下:
致:
然后添加
pack()
,看看结果是否发生了变化。理论上,这应该可以解决这个问题,除非发生了我们看不到的其他事情# 2 楼答案
假设
Board
主要用于绘图,可以重写getPreferredSize()
以返回合适的Dimension
。当你pack()
包围Window
时,它将采用所选的大小。更多信息请参见此Q&A,避免使用此pitfall# 3 楼答案
你需要结合使用
getPreferred/Minimum/MaximumSize
和一个真正尊重它的布局在这里,我使用了
GridBagLayout
设置,以便电路板始终保持相同大小,但单元将使用相同大小的最大数量如果希望将文本保留在电路板的底部(而不是框架),请删除
weighty
约束(可能还有weightx
)# 4 楼答案
我使用swing的首选方法是让内部组件设置它们的首选大小, 还有JFrame包
所以总的来说,你需要:
看看下面的代码是否符合你的要求
及