我知道类似here这样的问题,但似乎都没有解决我的问题。
到目前为止,我有两个类:扩展Canvas
的Game类和Window类。 Window类真正要做的就是创建JFrame
和JPanel
,并添加所有必需的组件。
我一直试图添加到JPanel
的组件之一是Game类本身。我已经将Game(这是Canvas的子类)传递给Window构造函数:
public Window(int width, int height, String title, Game game) {
// ...
}
然后,在Window构造函数中,显然可以将Game添加到JFrame
本身中:
public Window(int width, int height, String title, Game game) {
JFrame frame = new JFrame();
// frame.setSize(new Dimension(500,500)); frame.setVisible(true); etc.
frame.add(game);
}
但是,当我尝试将游戏添加到面板时,它不会显示!
public Window(int width, int height, String title, Game game) {
JFrame frame = new JFrame();
JPanel panel = new JPanel(new GridBagLayout());
panel.setSize(new Dimension(400,500));
panel.setLocation(0,0);
panel.requestFocus();
panel.setVisible(true);
frame.setSize(500, 500);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle(title);
frame.setVisible(true);
GridBagConstraints gbc = new GridBagConstraints();
panel.add(game, gbc); // doesn't work
frame.add(panel);
}
如果您想知道为什么我不只是将Game(又扩展了Canvas)添加到JFrame
本身,那是因为我想在框架中添加更多面板-我不希望面板是窗口的完整大小。将游戏添加到面板将使整个生活变得更加轻松,因为这样我便可以在窗口中放置其他面板。