我正在根据我的JPanel(640x480)的宽度/高度进行一些计算和绘图,但是当我输出鼠标的实际位置时,我注意到它的实际边界为(622x441)。为什么会这样,我该如何弥补呢?
这是我的GamePanel构造函数
public GamePanel(){
wallBoard = new WallBoard();
player = new Player(100, 100);
Map<String, GameObject> startingEquipment = new HashMap<String, GameObject>();
startingEquipment.put("Sword and Sheild", new Sword(player.getX(), player.getY()));
player.equip(startingEquipment);
enemy = new Enemy(10, 10);
objects.add(player);
objects.add(enemy);
mouseSelection = new MouseSelection();
setSize(new Dimension(640, 480));
setDoubleBuffered(true);
setFocusable(true);
addKeyListener(this);
addMouseListener(this);
addMouseMotionListener(this);
frame = new GameFrame();
frame.pack(); //this makes the window just the bar at the top
//frame.setUndecorated(true); crashes the program
frame.addKeyListener(this);
frame.add(this);
t = new Thread(this);
t.start();
hud = new HeadsUpDisplay(getWidth(), getHeight());
}
答案 0 :(得分:2)
JPanel是你设定它的大小,你只是没有看到整个事情。原因是因为框架装饰将JPanel向下推向右侧。不要设置JFrame的大小,只需调用frame.pack()
或只是将JFrame扩展到可以看到整个JPanel的大小。或者你总是可以通过调用frame.setUndecorated(true)
来设置未修饰的JFrame我遇到了同样的问题,这就是我如何修复它。祝你好运!
以下是JFrames的Java教程:
具体来说就是pack()方法:
注意:如果您使用pack(),请确保使用panel.setPreferredSize(width, height)
答案 1 :(得分:0)
试试这个http://www.miglayout.com/ 可能这会对你有帮助。
答案 2 :(得分:0)
补偿丢失鼠标区域的一种方法是将差异添加到初始大小,因此当您创建JPanel而不是将宽度和高度设置为640x480时,请将其设置为638x519。
我不确定为什么会这样做,一个猜测就是因为标题和侧面图形而带走了它的贬值,但我并不是正面的。