Java窗口 - 调整大小

时间:2017-07-21 09:55:34

标签: java

我正在编写一个2D游戏,并且想知道当有人调整窗口大小时它会调整大小以使其相同(与当前窗口大小相比)。例如,我有一个默认的'TILEWIDTH',如果有人调整窗口大小以使其变大,我怎么能这样做呢?它还会使'TILEWIDTH'更大?在我的启动器类(具有Main方法)的那一刻,它只是创建一个具有特定像素宽度和高度的新显示器(如果您调整窗口大小,它只会在游戏显示器周围创建一个闪烁的黑色/灰色区域)。

这是我的Display类(我在main方法的启动器类中创建了一个新显示):

package me.chickenpillow.game.display;

import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;

public class Display {

private JFrame frame;
private Canvas canvas;

private String title;
private int width, height;

public Display(String title, int width, int height) {
    this.title = title;
    this.width = width;
    this.height = height;

    createDisplay();
}

private void createDisplay() {
    frame = new JFrame(title);
    frame.setSize(width, height);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(true);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    canvas = new Canvas();
    canvas.setPreferredSize(new Dimension(width, height));
    canvas.setMaximumSize(new Dimension(width, height));
    canvas.setMinimumSize(new Dimension(width, height));
    canvas.setFocusable(false);

    frame.add(canvas);
    frame.pack();
}

public Canvas getCanvas() {
    return canvas;
}

public JFrame getFrame() {
    return frame;
}

}

1 个答案:

答案 0 :(得分:0)

您需要的是调整JFrame大小的监听器。另一个线程解释了添加侦听器:Listen to JFrame resize events as the user drags their mouse?

触发侦听器后,您可以获取JFrame的新维度并缩小/缩小“TILEWIDTH”变量并再次调用paint(...)方法。

如果您提供更多代码,我可以提供更准确的答案,但这就是它的原因。

<强>更新

createDisplay()方法内部,在初始化并设置frame后,您可以添加:

frame.addComponentListener(new ComponentAdapter() 
{  
    public void componentResized(ComponentEvent evt) {
        Component c = (Component)evt.getSource();
        //update your view/canvas
    }
});

我自己没有测试过这个特定组件,但这应该会给你带来很长的路要走