问题是,我无法使其成为800x600的尺寸。换句话说,当我运行程序时,框架很小,我无法用它做任何事情。
如何让框架变大?
我已经设置了首选大小并设置了画布边界。
然后是什么问题?
public class GameCanvas extends Canvas
{
private BufferStrategy buffer = null;
public GameCanvas()
{
setBounds(0, 0, 800, 600);
setIgnoreRepaint(true);
addKeyListener(new KeyInputHandler());
requestFocus();
}
public void addNotify()
{
super.addNotify();
this.createBufferStrategy(2);
buffer = this.getBufferStrategy();
setBounds(0, 0, 800, 600);
}
}
public class GameGuiFrame extends JFrame
{
private JPanel panel = new JPanel();
private GameCanvas canvas = new GameCanvas();
public GameGuiFrame()
{
this.setName("My Game");
this.pack();
this.setResizable(false);
this.setVisible(true);
panel = (JPanel) this.getContentPane();
panel.setPreferredSize(new Dimension(750,500));
panel.setLayout(null);
panel.add(canvas);
}
}
public class GameManager
{
public static void runGameLoop()
{
GameGuiFrame container = new GameGuiFrame();
container.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
public class Main
{
public static void main(String [] args)
{
GameManager.runGameLoop();
}
}
答案 0 :(得分:5)
在设置内容窗格的首选大小后,尝试打包Frame 。
答案 1 :(得分:2)
与您的问题无关,但根据您发布的代码,您似乎已复制了一些旧的AWT代码,并尝试在Swing应用程序中使用它。
我建议你只使用Swing组件。没有必要使用带有BufferStrategy的Canvas。只需使用JPanel,默认情况下它是双缓冲的。您复制的代码段是旧的,这不是在Swing中完成的方式。
不要使用null布局。 Swing旨在与布局管理器一起使用。然后pack()方法将能够正常工作。
无需使用WindowListener来关闭框架。这些天人们只是使用:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此外,在将组件添加到框架后,框架应该可见。
通常你应该使用Key Bindings而不是KeyListener来监听Swing应用程序中的关键事件。
我建议您查看Swing tutorial以获取有关上述概念的更多信息。
答案 2 :(得分:1)
您致电pack()
会将框架(及其中的组件)设置为首选尺寸。但是,您尚未指定首选大小。我建议删除您拨打setBounds()
的两个电话,并在主要方法中调用setBounds()
,而不是pack()
。