1

我正在根据我的 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());
}
4

3 回答 3

2

JPanel 是您设置的大小,您只是没有看到整个内容。原因是框架装饰将 JPanel 向下和向右推。无需设置 JFrame 的大小,只需调用frame.pack()或将 JFrame 扩展为可以看到整个 JPanel 的大小。或者你总是可以通过调用frame.setUndecorated(true)我有同样的问题来设置未装饰的 JFrame,这就是我修复它的方法。祝你好运!

这是关于 JFrames 的 Java 教程:

这里特别是 pack() 方法:

注意:如果您使用 pack(),请确保通过使用设置 JPanel 的首选大小panel.setPreferredSize(width, height)

于 2013-01-05T05:21:00.747 回答
0

试试这个http://www.miglayout.com/ 可能会对你有所帮助。

于 2013-01-05T04:47:07.617 回答
0

补偿丢失的鼠标区域的一种方法是将差异添加到初始大小,因此当您创建 JPanel 而不是将宽度和高度设置为 640x480 时,将其设置为 638x519。

我不确定它为什么会这样做,一种猜测是它会因为标题和侧面图形而消除了维度,但我并不乐观。

于 2013-01-05T04:55:22.423 回答