0
public class SocialNetwork extends Program 
                implements Constants {

  Canvas canvas = new Canvas();

  public void init() {

    breakoutButton = new JButton("Play Breakout Game");
    breakoutButton.setForeground(Color.WHITE);
    breakoutButton.setBackground(Color.BLACK);
    add(breakoutButton, WEST);
    breakoutButton.addActionListener(this);

   getContentPane().setBackground(Color.BLACK);

   addActionListeners();

   add(canvas);
  }
}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("Play Breakout Game") || e.getSource() ==   breakoutButton) {

    canvas.displayMessage("game started"); //displayMessage method displays the parameter string on the canvas.
    Breakout bo = new Breakout();
    bo.setVisible(true);
}

}

这是创建应该启动突破游戏的按钮的主要代码。突破的代码是:

public class Breakout extends GraphicsProgram {

    public void run() {

      setBackground(Color.BLACK);

      setUpBricks();

      points = new GLabel("Points: " + pointsCounter);
      add(points, getWidth()/2 - points.getWidth()/2, getHeight() - points.getAscent());
      points.setColor(Color.WHITE);

      for(int i=0; i < NTURNS; i++) {
        addMouseListeners();
        setUpGame(); 
        playGame();
        if (brickCounter == 0) {
          GLabel winner = new GLabel("You Win! You got " + pointsCounter + " points.");
          winner.setFont("Times New Roman-25");
          winner.setColor(Color.WHITE);
          add(winner, getWidth()/2 - winner.getWidth()/2, getHeight()/2 - winner.getAscent()/2);
          break;
        } 
      } 
      if (ball.getY() > getHeight()) { 
        GLabel message = new GLabel("Game Over! You got " + pointsCounter + " points.");
        message.setFont("Times New Roman-25");
        message.setColor(Color.WHITE);
        add(message, getWidth()/2 - message.getWidth()/2, getHeight()/2 - message.getAscent()/2);
       }
   }

问题是当我点击按钮时,它会注册点击,打开一个 JFrame,但不运行程序。只有一个空白的 JFrame。我究竟做错了什么?注意:我只发布了突围游戏部分的基本代码。

4

1 回答 1

0

您的代码创建Breakout对象并设置其可见性:

Breakout bo = new Breakout();
bo.setVisible(true);

但是,您永远不会调用任何其他方法。例如,您可能想要调用一个run方法或一个main方法。您必须以某种方式调用这些方法才能执行代码。

另一种选择是向Breakout该类添加一个侦听器,以便它在窗口打开时执行您的代码,如下所示:

addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowOpened(java.awt.event.WindowEvent evt) {
            //call a method that runs the program here!
        }
    });
于 2016-11-29T18:55:11.767 回答