有人可以帮助我做到这一点,以便在按下网格上的10个按钮后更改框架吗?

时间:2019-05-26 21:44:26

标签: java swing jframe

我需要确保在设置“播放”和“网格大小”后,在网格部分上按下10个按钮后,它能够更改帧。我尝试将for循环放入按钮活动监听器中,但这似乎没有用。想知道是否有人可以提供帮助!

import javax.swing.*;
import java.awt.*; 
import java.awt.event.*; 


public class BattleshipGame
{
  static JFrame intro; 
  static JFrame rulesframe; 
  static JFrame scoresframe; 
  static JFrame selection ;
  static JFrame grid; 
  static JPanel intropanel; 
  static JPanel rulespanel; 
  static JPanel scorespanel; 
  static JPanel gridselection; 
  static JPanel gridpanel; 


  public static void main (String [] args)
  {

    initialize (); 

  }//Main Method

  public static void gridmethod (int size) 
  {
    grid = new JFrame ();
    grid.setTitle("Player 1");
    grid.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    grid.setLocationRelativeTo(null);  
    gridpanel = new JPanel (new GridLayout(0, size)); 
    grid.getContentPane().add(gridpanel,BorderLayout.CENTER); //Puts the frame in the center of the screen

    JButton none = new JButton ();  
    gridpanel.add (none); 
    none.setPreferredSize(new Dimension(30, 45));
    JButton a = new JButton (" A ");
    gridpanel.add (a);
    a.setPreferredSize(new Dimension(30, 45));
    JButton b = new JButton (" B ");  
    gridpanel.add (b); 
    b.setPreferredSize(new Dimension(30, 45));
    JButton c = new JButton (" C ");  
    gridpanel.add (c); 
    c.setPreferredSize(new Dimension(30, 45));
    JButton d = new JButton (" D "); 
    gridpanel.add (d); 
    d.setPreferredSize(new Dimension(30,45));
    JButton e2 = new JButton (" E ");  
    gridpanel.add (e2); 
    e2.setPreferredSize(new Dimension(30, 45));
    JButton f = new JButton (" F ");
    gridpanel.add (f); 
    f.setPreferredSize(new Dimension(30, 45));
    JButton g = new JButton (" G ");
    gridpanel.add (g); 
    g.setPreferredSize(new Dimension(30, 45));
    JButton h = new JButton (" H "); 
    gridpanel.add (h);
    h.setPreferredSize(new Dimension(30, 45));
    JButton i = new JButton (" I "); 
    gridpanel.add (i);
    i.setPreferredSize(new Dimension(30, 45));
    JButton j = new JButton (" J "); 
    gridpanel.add (j);
    i.setPreferredSize(new Dimension(30, 45));
    if (size == 13)
    {
      JButton k = new JButton (" K "); 
      gridpanel.add (k);
      k.setPreferredSize(new Dimension(30, 45));
      JButton l = new JButton (" L "); 
      gridpanel.add (l);
      l.setPreferredSize(new Dimension(30, 45));
    }
    if (size == 16)
    {
      JButton k = new JButton (" K "); 
      gridpanel.add (k);
      k.setPreferredSize(new Dimension(30, 45));
      JButton l = new JButton (" L "); 
      gridpanel.add (l);
      l.setPreferredSize(new Dimension(30, 45));
      JButton m = new JButton (" M "); 
      gridpanel.add (m);
      m.setPreferredSize(new Dimension(30, 45));
      JButton n = new JButton (" N "); 
      gridpanel.add (n);
      n.setPreferredSize(new Dimension(30, 45));
      JButton o = new JButton (" O "); 
      gridpanel.add (o);
      o.setPreferredSize(new Dimension(30, 45));
    }

    for (int i2 = 0; i2 < size-1; i2++) //Loop for the buttons having a 10x10 grid. 
    {
      JButton one = new JButton (Integer.toString (i2 + 1)); 
      gridpanel.add(one); 
      one.setPreferredSize(new Dimension(30, 60));
      for (int j2= 0;j2 < size-1  ; j2++)
      {


        JButton button = new JButton (Integer.toString(j2) + ", " + Integer.toString(i2)); 
        gridpanel.add (button);
        button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {


            ((JButton)e.getSource()).setEnabled(false); 
            ((JButton)e.getSource()).setBackground(Color.BLUE);
            grid.validate();
            grid.repaint();
          }
        });
      }
    }

  }
  public static void initialize ()
  {

    intro = new JFrame (); 
    intro.setTitle ("BattleShip Game");     
    intro.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    intropanel = new JPanel (); 
    intropanel.setLayout (new GridBagLayout ()); 
    GridBagConstraints gbc = new GridBagConstraints (); 
    gbc.insets = new Insets (20,20,20,20);
    gbc.fill = GridBagConstraints.HORIZONTAL; 



    JButton play = new JButton ("Play"); 
    gbc.gridx =3; 
    gbc.gridy = 2; 
    gbc.ipady = 40; 
    gbc.ipadx = 40;
    intropanel.add(play,gbc); 
    play.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        intro.dispose (); //Removed the orignal frame 

        selection = new JFrame ("Grid Selection"); 
        selection.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
        gridselection = new JPanel (); 
        gridselection.setLayout (new GridBagLayout ()); 
        GridBagConstraints gbc = new GridBagConstraints (); 
        gbc.insets = new Insets (20,20,20,20);
        JLabel text = new JLabel ("Choose Your Level Of Difficulty"); 
        text.setFont(new Font("Verdana",1,20));
        gbc.gridx = 1; 
        gbc.gridy = 0; 
        gridselection.add (text,gbc); 
        JButton selec1 = new JButton ("Easy (10x10)");
        gbc.gridx = 1; 
        gbc.gridy = 1; 
        gridselection.add (selec1,gbc);
        selec1.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {


            ((JButton)e.getSource()).setEnabled(false); 
            selection.dispose (); 
            int size = 11; 
            gridmethod (size); 


            grid.pack();
            grid.setLocationRelativeTo (null); 
            grid.setVisible (true);
            intro.validate();
            intro.repaint();
          }
        });
        JButton selec2 = new JButton ("Medium (12x12)");
        gbc.gridx = 1; 
        gbc.gridy = 2; 
        gridselection.add (selec2,gbc);
        selec2.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {


            ((JButton)e.getSource()).setEnabled(false); 
            selection.dispose (); 
            int size = 13; 
            gridmethod (size); 

            grid.pack();
            grid.setLocationRelativeTo (null); 
            grid.setVisible (true);
            intro.validate();
            intro.repaint();
          }
        });
        JButton selec3 = new JButton ("Hard (15x15)");
        gbc.gridx = 1; 
        gbc.gridy = 3; 
        gridselection.add (selec3,gbc); 
        selec3.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {


            ((JButton)e.getSource()).setEnabled(false); 
            selection.dispose (); 
            int size = 16; 
            gridmethod (size); 

            grid.pack();
            grid.setLocationRelativeTo (null); 
            grid.setVisible (true);
            intro.validate();
            intro.repaint();
          }
        });




        selection.add (gridselection); 
        selection.pack (); 
        selection.setLocationRelativeTo (null); 
        selection.setVisible (true); 



        //Showing Both Frames


        intro.validate();
        intro.repaint();
      }
    });

    JButton rules = new JButton ("Rules"); 
    gbc.gridx = 2; 
    gbc.gridy = 2;
    gbc.ipady = 40; 
    gbc.ipadx = 40;

    intropanel.add(rules,gbc); 
    rules.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        intro.dispose (); 
        rulesframe = new JFrame ("Rules"); 
        rulesframe.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

        rulespanel = new JPanel ();
        rulespanel.setLayout (new GridBagLayout ()); 
        GridBagConstraints gbc = new GridBagConstraints (); 
        gbc.insets = new Insets (20,20,20,20);
        JLabel text = new JLabel ("Welcome to Battleship Game"); 
        gbc.gridx= 0;
        gbc.gridy = 0; 
        text.setFont(new Font("Verdana",1,30));
        text.setHorizontalAlignment (JLabel.CENTER); 
        text.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text,gbc); 
        JLabel text2 = new JLabel ("The rules are very simple and are as follows:");
        gbc.gridx= 0;
        gbc.gridy = 1; 
        text2.setFont(new Font("Verdana",1,20));
        text2.setHorizontalAlignment (JLabel.CENTER); 
        text2.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text2,gbc);
        JLabel text3 = new JLabel ("1. There are two players who have seprate playing areas"); 
        gbc.gridx= 0;
        gbc.gridy = 2;
        text3.setFont(new Font("Verdana",1,20));
        text3.setHorizontalAlignment (JLabel.CENTER); 
        text3.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text3,gbc);
        JLabel text4 = new JLabel ("2. You organize your fleet of ships by clicking a posistion on the grid"); 
        gbc.gridx= 0;
        gbc.gridy = 3; 
        text4.setFont(new Font("Verdana",1,20));
        text4.setHorizontalAlignment (JLabel.CENTER); 
        text4.setVerticalAlignment (JLabel.CENTER); 

        rulespanel.add(text4,gbc);
        JLabel text5 = new JLabel ("3.A hit is represented by green, a Miss is represented by red");
        gbc.gridx= 0;
        gbc.gridy = 4; 
        text5.setFont(new Font("Verdana",1,20));
        text5.setHorizontalAlignment (JLabel.CENTER); 
        text5.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text5,gbc);
        JLabel text6 = new JLabel ("4.To attack the enemy when it is your turn, simply click the tile on the enemy screen"); 
        gbc.gridx= 0;
        gbc.gridy = 5; 
        text6.setFont(new Font("Verdana",1,20));
        text6.setHorizontalAlignment (JLabel.CENTER); 
        text6.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text6,gbc);
        JLabel text7 = new JLabel ("5. A win is 100 points and bonus points will be awared for less shots taken"); 
        gbc.gridx= 0;
        gbc.gridy = 6; 
        text7.setFont(new Font("Verdana",1,20));
        text7.setHorizontalAlignment (JLabel.CENTER); 
        text7.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text7,gbc);
        JLabel text8 = new JLabel ("Under 15 shots taken a bonus of 50 points will be added"); 
        gbc.gridx= 0;
        gbc.gridy = 7;
        text8.setFont(new Font("Verdana",1,20));
        text8.setHorizontalAlignment (JLabel.CENTER); 
        text8.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text8,gbc);
        JLabel text9 = new JLabel ("Under 20 shots taken a bonus of 25 points will be added"); 
        gbc.gridx= 0;
        gbc.gridy = 8; 
        text9.setFont(new Font("Verdana",1,20));
        text9.setHorizontalAlignment (JLabel.CENTER); 
        text9.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text9,gbc);
        JLabel text10 = new JLabel ("6. The most important rule is to have fun!!"); 
        gbc.gridx= 0;
        gbc.gridy = 9; 
        text10.setFont(new Font("Verdana",1,20));
        text10.setHorizontalAlignment (JLabel.CENTER); 
        text10.setVerticalAlignment (JLabel.CENTER); 
        rulespanel.add(text10,gbc);
        JButton goback = new JButton ("Go Back");
        gbc.gridx = 0; 
        gbc.gridy = 10; 
        rulespanel.add(goback,gbc); 
        goback.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {

            rulesframe.dispose (); 
            ((JButton)e.getSource()).setEnabled(false); 
            initialize (); 

          }
        }); 

        rulesframe.add(rulespanel);

        rulesframe.pack (); 
        rulesframe.setLocationRelativeTo (null); 
        rulesframe.setVisible (true); 

      }
    });

    JButton scores = new JButton ("HighScores"); 
    gbc.gridx = 4; 
    gbc.gridy = 2;
    gbc.ipady = 40; 
    gbc.ipadx = 40;
    intropanel.add(scores,gbc); 
    scores.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ((JButton)e.getSource()).setEnabled(false); 
        intro.dispose (); 
        scoresframe = new JFrame ("Rules"); 
        scoresframe.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

        scorespanel = new JPanel ();
        scorespanel.setLayout (new GridBagLayout ()); 
        GridBagConstraints gbc = new GridBagConstraints (); 
        gbc.insets = new Insets (20,20,20,20);

        JLabel highscores = new JLabel ("Highscores");
        highscores.setFont (new Font ("Verdana",1,20)); 
        gbc.gridx = 2; 
        gbc.gridy = 1;                     
        scorespanel.add (highscores,gbc);
        JButton goback2 = new JButton ("Go Back "); 
        gbc.gridx = 2;
        gbc.gridy = 2; 
        scorespanel.add (goback2,gbc); 
        goback2.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {

            scoresframe.dispose (); 
            ((JButton)e.getSource()).setEnabled(false); 
            initialize (); 

          }
        }); 


        scoresframe.add(scorespanel);
        scoresframe.pack (); 
        scoresframe.setLocationRelativeTo (null); 
        scoresframe.setVisible (true);  
      }
    });    JLabel label = new JLabel("Battleship Game");
    label.setFont(new Font("Verdana",1,20));
    label.setHorizontalAlignment (JLabel.CENTER); 
    label.setVerticalAlignment (JLabel.CENTER); 
    gbc.gridx = 3;
    gbc.gridy = 1; 
    gbc.ipady = 0; 
    gbc.ipadx = 0;
    intropanel.add(label,gbc);

    JLabel background = new JLabel(new ImageIcon("242-2420673_battleships-will-be-used-in-a-similar-fashion.png")); 
    gbc.gridx = 3; 
    gbc.gridy = 0; 

    intropanel.add (background, gbc); 

    intro.add(intropanel);
    intro.pack (); 
    intro.setLocationRelativeTo (null); 
    intro.setVisible (true);  
  }
}//Public Class

0 个答案:

没有答案