2016-05-30 1 views
0

moi et mon ami écrivent actuellement un jeu de mémoire comme notre affectation finale pour notre premier cours de programmation. Nous nous demandions s'il y avait une autre façon d'initialiser nos Jbuttons et leurs propriétés d'une meilleure manière avec moins de lignes, sous une forme de boucle quelconque. En général, nous devons rendre ce code plus efficace, des conseils sont très appréciés :)Comment initialiser et utiliser beaucoup de Jbuttons similaires avec moins de lignes de code?

Niveau facile Classe:

import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Container; 
    import java.awt.Font; 
    import java.awt.GridLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.MouseEvent; 
    import java.awt.event.MouseListener; 

    import javax.swing.ImageIcon; 
    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JMenu; 
    import javax.swing.JMenuBar; 
    import javax.swing.JMenuItem; 
    import javax.swing.JPanel; 
    import javax.swing.JTextField; 
    import javax.swing.JTextPane; 
    import javax.swing.SwingConstants; 

    import java.util.Timer; 
    import java.util.TimerTask; 

    class EasyWindow extends JFrame implements ActionListener, MouseListener { 
     JLabel Score = new JLabel("Score: - "); 


    JLabel Welcome = new JLabel("Welcome " + StartWindow.user + "!"); 

    ImageIcon Back = new ImageIcon("mback.png"); 
    ImageIcon musicicon = new ImageIcon("musicicon.png"); 
    ImageIcon themeicon = new ImageIcon("themeicon.png"); 
    ImageIcon difficultyicon = new ImageIcon("difficulty.png"); 
    ImageIcon pointsicon = new ImageIcon("pointsicon.png"); 
    ImageIcon studentsicon = new ImageIcon("studentsicon.png"); 

    JButton AnOtherLevel = new JButton(
      "Click here if you want to change level."); 
    JButton Quit = new JButton("Quit Game!"); 

    JButton Button0 = new JButton(Back); 
    JButton Button1 = new JButton(Back); 
    JButton Button2 = new JButton(Back); 
    JButton Button3 = new JButton(Back); 
    JButton Button4 = new JButton(Back); 
    JButton Button5 = new JButton(Back); 
    JButton Button6 = new JButton(Back); 
    JButton Button7 = new JButton(Back); 
    JButton Button8 = new JButton(Back); 
    JButton Button9 = new JButton(Back); 
    JButton Button10 = new JButton(Back); 
    JButton Button11 = new JButton(Back); 
    JButton Button12 = new JButton(Back); 
    JButton Button13 = new JButton(Back); 
    JButton Button14 = new JButton(Back); 
    JButton Button15 = new JButton(Back); 

    JMenuBar menuBar = new JMenuBar(); 

    JMenu Settings = new JMenu("Settings"); 
    JMenu Theme = new JMenu("Theme"); 
    JMenu Rules = new JMenu("Rules"); 
    JMenu Creators = new JMenu("Creators"); 

    JMenuItem Music = new JMenuItem("Music", musicicon); 

    JMenuItem Celebrities = new JMenuItem("Celebrities", themeicon); 
    JMenuItem Cities = new JMenuItem("Cities", themeicon); 
    JMenuItem Memes = new JMenuItem("Memes", themeicon); 

    JMenuItem Difficulty = new JMenuItem("Difficulty", difficultyicon); 
    JMenuItem Points = new JMenuItem("Points", pointsicon); 

    JMenuItem Ava = new JMenuItem("Ava Baghchesara", studentsicon); 
    JMenuItem Michelle = new JMenuItem("Michelle Bill", studentsicon); 

    static int[] cardChecker = new int[2]; 
    static int[] card = new int[9]; 
    int[] StoreCards = new int[16]; 
    int[] Button = new int[2]; 

    static int flipped = 0; 
    static int score = 0; 
    static int seconds = 0; 

    String imageType = ".png"; 
    String back = ".png"; 

    JPanel Top = new JPanel(new GridLayout(1, 1, 5, 15)); 
    JPanel Center = new JPanel(new GridLayout(4, 4, 5, 5)); 
    JPanel Bottom = new JPanel(new GridLayout(1, 2, 0, 0)); 
    JPanel Right = new JPanel(new GridLayout(2, 2, 0, 0)); 
    JPanel Left = new JPanel(new GridLayout(1, 1, 0, 0)); 

    static Container contentArea; 

    public EasyWindow() { 
     super("User: " + StartWindow.user + " || Easy Level"); 
     setSize(600, 600); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(true); 
     setLayout(new BorderLayout()); 
     setVisible(true); 

     AnOtherLevel.addActionListener(this); 
     Quit.addActionListener(this); 

     AnOtherLevel.addMouseListener(this); 
     Quit.addMouseListener(this); 

     Button0.addActionListener(this); 
     Button1.addActionListener(this); 
     Button2.addActionListener(this); 
     Button3.addActionListener(this); 
     Button4.addActionListener(this); 
     Button5.addActionListener(this); 
     Button6.addActionListener(this); 
     Button7.addActionListener(this); 
     Button8.addActionListener(this); 
     Button9.addActionListener(this); 
     Button10.addActionListener(this); 
     Button11.addActionListener(this); 
     Button12.addActionListener(this); 
     Button13.addActionListener(this); 
     Button14.addActionListener(this); 
     Button15.addActionListener(this); 

     AnOtherLevel.setBackground(Color.white); 
     AnOtherLevel.setForeground(Color.BLACK); 

     Quit.setBackground(Color.white); 
     Quit.setForeground(Color.BLACK); 

     Button0.setBackground(Color.white); 
     Button1.setBackground(Color.white); 
     Button2.setBackground(Color.white); 
     Button3.setBackground(Color.white); 
     Button4.setBackground(Color.white); 
     Button5.setBackground(Color.white); 
     Button6.setBackground(Color.white); 
     Button7.setBackground(Color.white); 
     Button8.setBackground(Color.white); 
     Button9.setBackground(Color.white); 
     Button10.setBackground(Color.white); 
     Button11.setBackground(Color.white); 
     Button12.setBackground(Color.white); 
     Button13.setBackground(Color.white); 
     Button14.setBackground(Color.white); 
     Button15.setBackground(Color.white); 

     add(Top, BorderLayout.NORTH); 
     add(Left, BorderLayout.WEST); 
     add(Center, BorderLayout.CENTER); 
     add(Right, BorderLayout.EAST); 
     add(Bottom, BorderLayout.SOUTH); 

     Welcome.setFont(new Font("Serif", Font.PLAIN, 30)); 
     Welcome.setHorizontalAlignment(SwingConstants.CENTER); 
     Welcome.setVerticalAlignment(SwingConstants.CENTER); 
     Top.add(Welcome); 
     Top.setBackground(Color.white); 

     Center.add(Button0); 
     Center.add(Button1); 
     Center.add(Button2); 
     Center.add(Button3); 
     Center.add(Button4); 
     Center.add(Button5); 
     Center.add(Button6); 
     Center.add(Button7); 
     Center.add(Button8); 
     Center.add(Button9); 
     Center.add(Button10); 
     Center.add(Button11); 
     Center.add(Button12); 
     Center.add(Button13); 
     Center.add(Button14); 
     Center.add(Button15); 

     Center.setBackground(Color.white); 
     Right.setBackground(Color.white); 

     Right.add(Score); 
     Right.add(Timer); 

     Bottom.add(AnOtherLevel); 
     Bottom.add(Quit); 
     Bottom.setBackground(Color.white); 

     contentArea = getContentPane(); 
     contentArea.add("North", Top); 
     contentArea.add("Center", Center); 
     contentArea.add("South", Bottom); 

     menuBar.add(Settings); 
     menuBar.add(Rules); 
     menuBar.add(Creators); 

     setJMenuBar(menuBar); 

     Music.addActionListener(this); 

     Theme.addActionListener(this); 
     Celebrities.addActionListener(this); 
     Cities.addActionListener(this); 
     Memes.addActionListener(this); 

     Difficulty.addActionListener(this); 
     Points.addActionListener(this); 

     Ava.addActionListener(this); 
     Michelle.addActionListener(this); 

     Settings.add(Music); 
     Settings.add(Theme); 

     Theme.add(Celebrities); 
     Theme.add(Cities); 
     Theme.add(Memes); 

     Rules.add(Difficulty); 
     Rules.add(Points); 

     Creators.add(Ava); 
     Creators.add(Michelle); 

     Game(); 

     setContentPane(contentArea); 
     contentArea.setBackground(Color.white); 
    } 

    public void Game() { 
     int number = 0; 
     int x = 0; 

     ImageIcon image[] = new ImageIcon[15]; 

     while (x < 16) { 
      number = (int) RandomNumbers.GetRandomNumber(8); 
      image[number] = new ImageIcon(number + imageType); 

      if (card[number] < 2) { 
       card[number]++; 

       StoreCards[x] = number; 
       System.out.println(number + " Number" + "card nr " + x); 
       x++; 

      } 

     } 

    } 

    public void Reset() { 
     if (flipped > 2) { 
      flipped = 0; 

      Button0.setIcon(Back); 
      Button1.setIcon(Back); 
      Button2.setIcon(Back); 
      Button3.setIcon(Back); 
      Button4.setIcon(Back); 
      Button5.setIcon(Back); 
      Button6.setIcon(Back); 
      Button7.setIcon(Back); 
      Button8.setIcon(Back); 
      Button9.setIcon(Back); 
      Button10.setIcon(Back); 
      Button11.setIcon(Back); 
      Button12.setIcon(Back); 
      Button13.setIcon(Back); 
      Button14.setIcon(Back); 
      Button15.setIcon(Back); 

     } 

    } 

    public void Check(int number) { 
     if (cardChecker[0] == cardChecker[1]) { 
      score = score + 2; 
      Score.setText("Score: " + score); 
      DisableButtons(); 

     } else { 
      System.out.println("jj"); 
     } 
     if (score == 16) { 
      setVisible(false); 
      new EndWindow1(); 
     } 
    } 

    public void Card1and2(int number, int button) { 
     if (flipped == 0) { 
      cardChecker[0] = number; 
      Button[0] = button; 
     } 
     if (flipped == 1) { 
      cardChecker[1] = number; 
      Button[1] = button; 

      if (StoreCards[cardChecker[0]] == StoreCards[cardChecker[1]]) { 
       if (Button[0] != Button[1]) 
        Check(number); 
      } 

     } 

    } 

    public void DisableButtons() { 
     if (Button[0] == 0 || Button[1] == 0) { 
      Button0.setVisible(false); 
     } 
     if (Button[0] == 1 || Button[1] == 1) { 
      Button1.setVisible(false); 
     } 
     if (Button[0] == 2 || Button[1] == 2) { 
      Button2.setVisible(false); 
     } 
     if (Button[0] == 3 || Button[1] == 3) { 
      Button3.setVisible(false); 
     } 
     if (Button[0] == 4 || Button[1] == 4) { 
      Button4.setVisible(false); 
     } 
     if (Button[0] == 5 || Button[1] == 5) { 
      Button5.setVisible(false); 
     } 
     if (Button[0] == 6 || Button[1] == 6) { 
      Button6.setVisible(false); 
     } 
     if (Button[0] == 7 || Button[1] == 7) { 
      Button7.setVisible(false); 
     } 
     if (Button[0] == 8 || Button[1] == 8) { 
      Button8.setVisible(false); 
     } 
     if (Button[0] == 9 || Button[1] == 9) { 
      Button9.setVisible(false); 
     } 
     if (Button[0] == 10 || Button[1] == 10) { 
      Button10.setVisible(false); 
     } 
     if (Button[0] == 11 || Button[1] == 11) { 
      Button11.setVisible(false); 
     } 
     if (Button[0] == 12 || Button[1] == 12) { 
      Button12.setVisible(false); 
     } 
     if (Button[0] == 13 || Button[1] == 13) { 
      Button13.setVisible(false); 
     } 
     if (Button[0] == 14 || Button[1] == 14) { 
      Button14.setVisible(false); 
     } 
     if (Button[0] == 15 || Button[1] == 15) { 
      Button15.setVisible(false); 
     } 
    } 


    public void actionPerformed(ActionEvent event) { 

     if (event.getSource() == AnOtherLevel) { 
      setVisible(false); 
      new AnOtherWindow(); 

     } 

     if (event.getSource() == Quit) { 
      System.exit(0); 
     } 

     if (event.getSource() == Button0) { 

      int number = StoreCards[0]; 
      Button0.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 0); 

      flipped++; 
      Reset(); 

     } 
     if (event.getSource() == Button1) { 

      int number = StoreCards[1]; 
      Button1.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 1); 

      flipped++; 
      Reset(); 

     } 
     if (event.getSource() == Button2) { 
      int number = StoreCards[2]; 
      Button2.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 2); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button3) { 
      int number = StoreCards[3]; 
      Button3.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 3); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button4) { 
      int number = StoreCards[4]; 
      Button4.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 4); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button5) { 
      int number = StoreCards[5]; 
      Button5.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 5); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button6) { 
      int number = StoreCards[6]; 
      Button6.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 6); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button7) { 
      int number = StoreCards[7]; 
      Button7.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 7); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button8) { 
      int number = StoreCards[8]; 
      Button8.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 8); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button9) { 
      int number = StoreCards[9]; 
      Button9.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 9); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button10) { 
      int number = StoreCards[10]; 
      Button10.setIcon(new ImageIcon(number + imageType)); 
      Card1and2(number, 10); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button11) { 
      int number = StoreCards[11]; 
      Button11.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 11); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button12) { 
      int number = StoreCards[12]; 
      Button12.setIcon(new ImageIcon(number + ".png")); 

      Card1and2(number, 12); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button13) { 
      int number = StoreCards[13]; 
      Button13.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 13); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button14) { 
      int number = StoreCards[14]; 
      Button14.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 14); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Button15) { 
      int number = StoreCards[15]; 
      Button15.setIcon(new ImageIcon(number + imageType)); 

      Card1and2(number, 15); 

      flipped++; 
      Reset(); 
     } 
     if (event.getSource() == Celebrities) { 
      imageType = "c.png"; 
      Back = new ImageIcon("ceback.png"); 
     } 
     if (event.getSource() == Cities) { 
      imageType = ".jpg"; 
      Back = new ImageIcon("ciback.png"); 
     } 

     if (event.getSource() == Memes) { 
      imageType = ".png"; 
      Back = new ImageIcon("mback.png"); 
     } 



    } 

    public void mouseEntered(MouseEvent event) { 
     if (event.getSource() == AnOtherLevel) { 
      AnOtherLevel.setBackground(Color.lightGray); 
      AnOtherLevel.setForeground(Color.BLACK); 
     } 

     if (event.getSource() == Quit) { 
      Quit.setBackground(Color.lightGray); 
      Quit.setForeground(Color.BLACK); 
     } 
    } 

    public void mouseClicked(MouseEvent e) { 
    } 

    public void mouseExited(MouseEvent e) { 
     AnOtherLevel.setBackground(Color.white); 
     AnOtherLevel.setForeground(Color.BLACK); 
     Quit.setBackground(Color.white); 
     Quit.setForeground(Color.BLACK); 

    } 

     public void mousePressed(MouseEvent e) { 
     } 

     public void mouseReleased(MouseEvent e) { 
     } 
    } 

public class EasyLevelWindow { 
    public static void main(String[] args) { 
     EasyWindow win = new EasyWindow(); 

    } 
} 
+3

Utilisez un tableau pour vos boutons. – pzaenger

+0

Ou une liste: les deux aideront partout; pas seulement l'initialisation. Le code qui implique les variables foo1, foo2 .. fooN doit généralement être traité comme une séquence foo [n]. Et tout code nécessitant un 'copier-coller excessif' doit être réévalué. – user2864740

+0

Si je crée un tableau JButton comme: JButton [] button = new JButton [15]; et utilisez plus tard une boucle for pour initialiser: for (int n = 0; n <= button.length; n ++) { \t \t \t bouton [n] .setIcon (Back); \t \t \t bouton [n] .addActionListener (this); \t \t \t bouton [n] .setBackground (Couleur.white); \t \t \t Centre.add (bouton [n]); \t \t} Je reçois un message d'erreur à propos de ces quatre lignes – michelle

Répondre

1

Comme déjà mentionné dans les commentaires, vous devez mettre vos boutons dans un tableau:

JButton[] buttons = new JButton[15]; 

ou une liste:

List<JButton> buttons = new ArrayList<JButton>(); 

Ensuite, vous pouvez utiliser une simple boucle pour créer les boutons et définissez leurs propriétés:

for(int i = 0; i < 15; i++) { 
    buttons[i] = new JButton(); 
    buttons[i].setIcon(...); 
    // ... 
} 

Dans les commentaires que vous avez mentionnés, vous avez reçu une erreur dans la boucle. Cela était dû au fait que vous n'avez pas créé les objets JButton. Lorsque vous définissez le tableau ou la liste comme vu ci-dessus, vous créez simplement un espace mémoire contenant 15 objets null. Je pense que cela devient un peu plus clair en regardant la définition List. Sur ces objets, vous ne pouvez naturellement pas appeler de méthodes. Vous devez toujours créer explicitement ces 15 JButtons comme première étape de la boucle for.

1

séparer en plusieurs micro-classes. Résumé: Widow peut être décomposé en Toolbar, Footer, LeftNavigationPanel (par exemple). Ensuite, vous ferez

new Footer(this); 

ou

new Toolbar(this); 

ou

Toolbar.attachTo(this); 

Lorsque la barre d'outils, vous aurez:

class Toolbar { 
    JButton save... 
    JButton play.. 
    JButton remove.. 

    static attachTo(JFrame frame) { 
     attaching to frame these buttons 
    } 
} 

Vous décomposer votre code un peu . Et toutes les parties de votre cadre seraient un peu des modules.