JPanel的“真实”宽度/高度

时间:2013-01-05 04:42:51

标签: java swing jpanel layout-manager

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

3 个答案:

答案 0 :(得分:2)

JPanel是你设定它的大小,你只是没有看到整个事情。原因是因为框架装饰将JPanel向下推向右侧。不要设置JFrame的大小,只需调用frame.pack()或只是将JFrame扩展到可以看到整个JPanel的大小。或者你总是可以通过调用frame.setUndecorated(true)来设置未修饰的JFrame我遇到了同样的问题,这就是我如何修复它。祝你好运!

以下是JFrames的Java教程:

具体来说就是pack()方法:

注意:如果您使用pack(),请确保使用panel.setPreferredSize(width, height)

设置JPanel的首选大小

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我不确定为什么会这样做,一个猜测就是因为标题和侧面图形而带走了它的贬值,但我并不是正面的。