我正在编写一个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;
}
}
答案 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
}
});
我自己没有测试过这个特定组件,但这应该会给你带来很长的路要走