2016-05-30 3 views
0

Ich und mein Freund schreiben gerade ein Memory-Spiel als unsere letzte Aufgabe für unseren ersten Programmierkurs. Wir haben uns gefragt, ob es eine andere Möglichkeit gäbe, unsere Jbuttons und ihre Eigenschaften besser mit weniger Zeilen in einer Art Schleifenform zu initialisieren. Im Allgemeinen müssen wir diesen Code effizienter gestalten, sind alle Tipps sehr geschätzt :)Wie viele ähnliche Jbuttons mit weniger Codezeilen zu initialisieren und zu verwenden?

Einfache Stufe Klasse:

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

Verwenden Sie ein Array für Ihre Schaltflächen. – pzaenger

+0

Oder eine Liste: beide werden überall helfen; nicht nur Initialisierung. Code, der Variablen foo1, foo2 .. fooN beinhaltet, sollte im Allgemeinen als eine Sequenz foo [n] behandelt werden. Und jeder Code, der "exzessives Kopieren und Einfügen" erfordert, sollte neu bewertet werden. – user2864740

+0

Wenn ich ein JButton-Array wie zum Beispiel erstellen: JButton [] button = new JButton [15]; und später verwenden Sie eine for-Schleife zum Initialisieren: for (int n = 0; n <= button.length; n ++) { \t \t \t Schaltfläche [n] .setIcon (Zurück); \t \t \t Schaltfläche [n] .addActionListener (this); \t \t \t Schaltfläche [n] .setBackground (Farbe.weiß); \t \t \t Center.add (Schaltfläche [n]); \t \t} Ich bekomme eine Fehlermeldung über diese vier Zeilen – michelle

Antwort

1

Wie bereits in den Kommentaren erwähnt, sollten Sie Ihre Schaltflächen in einem Array setzen:

JButton[] buttons = new JButton[15]; 

oder eine Liste:

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

Dann können Sie eine einfache Verwendung für Schleife, um die Tasten zu erstellen und legen Sie ihre Eigenschaften fest:

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

In den Kommentaren, die Sie erwähnten, haben Sie einen Fehler in der Schleife erhalten. Das war aufgrund der Tatsache, dass Sie nicht tatsächlich die JButton Objekte erstellt haben. Wenn Sie das Array oder die Liste wie oben beschrieben definieren, erstellen Sie nur Speicherplatz mit 15 null Objekten. Ich denke, das wird ein bisschen klarer bei der Betrachtung der List Definition. Auf diesen Objekten können Sie natürlich keine Methoden aufrufen. Sie müssen diese 15 JButtons als ersten Schritt in der for-Schleife immer noch explizit erstellen.

1

trennen sie in mehrere Mikro-Klassen. Zusammenfassung: Die Widow könnte in Toolbar, Footer, LeftNavigationPanel (zum Beispiel) zerlegt werden. Dann tun Sie

new Footer(this); 

oder

new Toolbar(this); 

oder

Toolbar.attachTo(this); 

Wenn in Toolbar haben Sie:

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

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

Sie Ihren Code ein wenig zersetzen . Und alle Teile deines Rahmens wären ein bisschen Module.

Verwandte Themen