添加将Canvas扩展到JPanel的类不起作用

时间:2018-08-11 17:00:11

标签: java swing canvas jframe jpanel

我知道类似here这样的问题,但似乎都没有解决我的问题。

到目前为止,我有两个类:扩展Canvas的Game类和Window类。 Window类真正要做的就是创建JFrameJPanel,并添加所有必需的组件。

我一直试图添加到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本身,那是因为我想在框架中添加更多面板-我不希望面板是窗口的完整大小。将游戏添加到面板将使整个生活变得更加轻松,因为这样我便可以在窗口中放置其他面板。

0 个答案:

没有答案
相关问题