0

我有一个 Jframe,其中有一些面板作为实例变量,其中一个面板是网格板(我正在实现动作游戏线)。游戏结束后,我有一个“再次播放”按钮,我想重新初始化我的棋盘面板。我尝试了很多事情,比如从内容窗格中删除我的面板并重新初始化它,但到目前为止没有任何效果。这是我尝试过的一些事情(我没有一次尝试所有这些)

public class Frame extends JFrame implements  MouseListener{

JLabel l = new JLabel();
Panel1 Boards;
Panel2 newGame;
Panel3 winner;
Point lastCheckerSelected;
Board game = new Board();
    public Frame() {
    setResizable(false);
    setTitle("Lines Of Action");
    setBounds(290, 350, 1000, 700);
    setLayout(null);
   winner=new Panel3(); 
    winner.playAgain.addMouseListener(this);
    getContentPane().add(winner);

    Boards= new Panel1();

     getContentPane().add(Boards);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    l.setIcon(new ImageIcon(
            "E:\\background0213.jpg"));
    l.setBounds(0 ,0 ,  1000 , 700);
    getContentPane().add(l);
    validate(); 
    newGame=new Panel2();
    newGame.b.addMouseListener(this);
  getContentPane().add(newGame);

  for(int i=0;i<8;i++){
      for(int j=0;j<8;j++){
          Boards.x[i][j].addMouseListener(this);
          Boards.y[i][j].addMouseListener(this);
      }
  }

}
 public void mouseClicked(MouseEvent e) {
    if(e.getSource().equals(newGame.b)) {
           Boards.setVisible(true);
           newGame.setVisible(false);
           game=new Board();
     }
if(this.game.getWinner()==1) {
    winner.setVisible(true);
    winner.whiteWins.setVisible(true);
}
if(this.game.getWinner()==2) {
    winner.setVisible(true);
    winner.greywins.setVisible(true);
}
if(e.getSource().equals(winner.playAgain)) {
            //this.getContentPane().remove(Boards);
        //  this.game= new Board();                                          
        //  Boards = new Panel1();      
        //  this.getContentPane().add(Boards);
            //Boards.setVisible(true);
        //  validate();
        //  Boards.repaint();


        }
}

public static void main(String[] args) {
    Frame frame = new Frame();
    frame.setVisible(true);



}

我仍然无法让我的新面板出现(从内容窗格中删除 Boards 面板使其消失,这很好,但新面板没有出现)这是我的面板 =1,其中包含董事会

public class Panel1 extends JPanel  {
JButton[][] x = new JButton[8][8];
JButton[][] y=new JButton[8][8];
Graphics g;
public Panel1() {
    setBounds(0, 30 ,400 ,400); 
    setLayout(new GridLayout(8, 8));
    setOpaque(false);
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            x[i][j] = new JButton();
            x[i][j].setSize(50, 50);
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0)) {
                x[i][j].setBackground(Color.DARK_GRAY.darker());
            //  x[i][j].setBackground(new Color(111,89,81,150));
            }
            else {
                // Color.OPAQUE = 2;
                x[i][j].setBackground(Color.red.darker().darker());
            //  x[i][j].setBackground(new Color(223,37,32,150));
            }

            x[i][j].setEnabled(false);
            add(x[i][j]);
        }
    }
for(int i = 0; i < 8 ;i++){
    for(int j=0;j < 8;j++){
        y[i][j]=new JButton();
    x[i][j].add(y[i][j]);   
    //  y[i][j].setSize(100,100);

    //  y[i][j].setEnabled(false);
    //  y[i][j].setOpaque(false);
    //  y[i][j].setContentAreaFilled(false);
//      y[i][j].setBorderPainted(false);
        y[i][j].setVisible(false);

    }
}
for(int i=1;i<7;i++){
//  y[0][i].setOpaque(true);
    y[0][i].setBackground(Color.white);
    y[0][i].setEnabled(true);
    y[0][i].setVisible(true);
//  y[7][i].setOpaque(true);
    y[7][i].setBackground(Color.white);
    y[7][i].setEnabled(true);
    y[7][i].setVisible(true);

}
for(int i=1;i<7;i++){
//  y[i][0].setOpaque(true);
    y[i][0].setEnabled(true);
    y[i][0].setBackground(new Color(102,125,153));
    y[i][0].setVisible(true);
//  y[i][7].setOpaque(true);
    y[i][7].setEnabled(true);
    y[i][7].setBackground(new Color(102,125,153));
    y[i][7].setVisible(true);
}
//  addMouseListener(this);
    setVisible(false);
}




}
4

4 回答 4

1

这四个一起试试。需要查看更多代码以确保此工作正常。

if(e.getSource().equals(winner.playAgain)) {
    this.getContentPane().remove(Boards);
    Boards = new Panel1();
    this.getContentPane().add(Boards);
    this.invalidate();
    this.validate();
    this.repaint();
}
于 2013-05-10T14:20:14.557 回答
1

你也可以试试这个:

if(e.getSource().equals(winner.playAgain)) 
{
   Boards.removeAll();
   revalidate();
   repaint();
}

我认为您不需要创建新Panel1实例。

于 2013-05-10T14:25:15.787 回答
1

我有一个 Jframe,其中有一些面板作为实例变量,其中一个面板是网格板(我正在实现动作游戏线)。游戏结束后,我有一个“再次播放”按钮,我想重新初始化我的棋盘面板。我尝试了很多事情,比如从内容窗格中删除我的面板并重新初始化它,但到目前为止没有任何效果。

我认为CardLayout是最好的选择

于 2013-05-10T14:37:44.347 回答
0

组件在屏幕中可见后,如果您删除并添加组件,则必须再次调用Component.repaint()Component.validate()调用重绘。在你actionPerformed()的里面做这个playAgainButton()

于 2013-05-11T02:07:22.197 回答