2016-10-29 1 views
4

, wie ich mit meinem kleinen Programm Fortschritte habe ich 4-Taste, die nach den gleichen Regeln Regeln sind, und ich weiß nicht, wie Sie den Code zu reduzieren, ich bin fast sicher, kann es vereinfachen werden:Java-Code Umstrukturierung

private void initGame(Quizz quizz) { 

    jLabelScore = new javax.swing.JLabel(); 
    jLabelComptQ = new javax.swing.JLabel(); 
    jButtonA = new javax.swing.JButton(); 
    jButtonB = new javax.swing.JButton(); 
    jButtonC = new javax.swing.JButton(); 
    jButtonD = new javax.swing.JButton(); 

    int i = quizz.aleatQuestion(); 
    ArrayList<Reponse> listeRep = quizz.showAnswer(i); 
    Reponse reponseA = listeRep.get(0); 
    Reponse reponseB = listeRep.get(1); 
    Reponse reponseC = listeRep.get(2); 
    Reponse reponseD = listeRep.get(3); 

    jButtonA.setText(reponseA.getReponse()); 
    jButtonB.setText(reponseB.getReponse()); 
    jButtonC.setText(reponseC.getReponse()); 
    jButtonD.setText(reponseD.getReponse()); 
    jLabelScore.setText("Score : " + quizz.getScore()); 
    int a = quizz.getCompteurQ()+1; 
    jLabelComptQ.setText("Question n°" + a); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    setTitle("Jeu en Cours - StudenTest"); 
    setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); 
    setMaximumSize(new java.awt.Dimension(800, 600)); 
    setMinimumSize(new java.awt.Dimension(800, 600)); 
    setResizable(false); 
    setSize(new java.awt.Dimension(800, 600)); 
    getContentPane().setLayout(null); 
    getContentPane().removeAll(); 

    getContentPane().add(jLabelScore); 
    jLabelScore.setBounds(0, 20, 250, 250); 
    jLabelScore.setVerticalAlignment(SwingConstants.TOP); 

    getContentPane().add(jLabelComptQ); 
    jLabelComptQ.setBounds(0, 0, 250, 250); 
    jLabelComptQ.setVerticalAlignment(SwingConstants.TOP); 

    jButtonA.addMouseListener(new java.awt.event.MouseAdapter() { 
     @Override 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      if (reponseA.getVerif()) { 
       quizz.win(); 
      } else { 
       quizz.lose(); 
      } 
      quizz.endOfTurn(); 
      if (quizz.getCompteurQ() >= 5) { 
       Component frame = null; 
       JOptionPane.showMessageDialog(frame, "Score Final :" + quizz.getScore() + "\nBien Joué"); 
       initComponents(); 
      } else { 
       initGame(quizz); 
      } 
     } 

    }); 
    getContentPane().add(jButtonA); 
    jButtonA.setBounds(425, 325, 150, 75); 

    jButtonB.addMouseListener(new java.awt.event.MouseAdapter() { 
     @Override 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      if (reponseB.getVerif()) { 
       quizz.win(); 
      } else { 
       quizz.lose(); 
      } 
      quizz.endOfTurn(); 
      if (quizz.getCompteurQ() >= 5) { 
       Component frame = null; 
       JOptionPane.showMessageDialog(frame, "Score Final :" + quizz.getScore() + "\nBien Joué"); 
       initComponents(); 
      } else { 
       initGame(quizz); 
      } 
     } 
    }); 
    getContentPane().add(jButtonB); 
    jButtonB.setBounds(225, 325, 150, 75); 

    jButtonC.addMouseListener(new java.awt.event.MouseAdapter() { 
     @Override 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      if (reponseC.getVerif()) { 
       quizz.win(); 
      } else { 
       quizz.lose(); 
      } 
      quizz.endOfTurn(); 
      if (quizz.getCompteurQ() >= 5) { 
       Component frame = null; 
       JOptionPane.showMessageDialog(frame, "Score Final :" + quizz.getScore() + "\nBien Joué"); 
       initComponents(); 
      } else { 
       initGame(quizz); 
      } 
     } 
    }); 
    getContentPane().add(jButtonC); 
    jButtonC.setBounds(425, 450, 150, 75); 

    jButtonD.addMouseListener(new java.awt.event.MouseAdapter() { 
     @Override 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      if (reponseD.getVerif()) { 
       quizz.win(); 
      } else { 
       quizz.lose(); 
      } 
      quizz.endOfTurn(); 
      if (quizz.getCompteurQ() >= 5) { 
       Component frame = null; 
       JOptionPane.showMessageDialog(frame, "Score Final :" + quizz.getScore() + "\nBien Joué"); 
       initComponents(); 
      } else { 
       initGame(quizz); 
      } 
     } 
    }); 
    getContentPane().add(jButtonD); 
    jButtonD.setBounds(225, 450, 150, 75); 

    pack(); 

    setLocationRelativeTo(null); 
} 

Sie können sehen, dass AntwortA/B/C/D und jButtonA/B/C/D der gleichen Anweisung folgen. Ich überprüfte die Stunde, die ich hatte, aber ich fand keine Hilfe für dieses Problem, auch wenn es mir sehr geholfen hat. Ich habe versucht, Online-Forschung zu machen, aber es war nicht verwandt oder die Lösung nicht ... Ich hoffe, Sie haben verstanden, was ich gesagt habe (ich bin nicht fließend Englisch).

Ps: Ich habe den ganzen Code der Methode, aber wenn nötig, kann ich den Teil entfernen, die nicht vollständig notwendig sind.

Antwort

3

Was Sie suchen ist eigentlich als Code genannt Refactoring, so dass Sie für suchen müssen, wie Sie den Code Refactoring?

Sie müssen Ihren Code und schreiben Sie die einzelne Verantwortung Klassen und kleinere Methoden refactor, so dass es verständlich/lesbar/erträglich besser sein können.

zu beginnen, können Sie implementieren Ihre MouseListener in getrennte Klassen wie folgt:

public class ButtonAMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonA MouseListener code here 
} 

public class ButtonBMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonB MouseListener code here 
} 

public class ButtonCMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonC MouseListener code here 
} 

public class ButtonDMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonD MouseListener code here 
} 

nun die Objekte für diese Klassen erstellen und sie in der ursprünglichen Klasse.

+0

ok Ich denke ich sehe was du redest, ich werde es jetzt richtig versuchen. Ich werde zurückkommen, wenn das funktioniert oder nicht. Danke Mann –

1

Der beste Weg, um Code zu reduzieren, besteht darin, die Komponenten in Arrays zu gruppieren. weil UI die Tasten in einem Array viele verschiedene Arten von Tasten, in Ihrem Fall möglich ist, zu einer Gruppe haben kann, würde ich actionsPerformed auch verwenden und nicht

JButton jButtons[] = new javax.swing.JButton[4]; 

for(int i=0;i<4;i++){ 
jButtons[i] = new javax.swing.JButton(); 
jButtons[i].setText(listeRep.get(i).getReponse()); 
jButtons[i].setActionCommand(""+i); 
jButtons[i].addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
    System.out.println("Button Pressed"); 
    switch (e.getActionCommand()) { 
     case "0": 
      //response A 
      break; 
     case "1": 
      //reponse B 
      break; 
     case "2": 
      //response C 
      break; 
     case "3": 
      //Response D 
      break; 
     default: 
      break; 

    } 
}); 

getContentPane().add(jButtons[i]); 
jButtons[i].setBounds(425, 325+i*75, 150, 75); 
} 
+0

Ich dachte an etwas wie das, als ich zuerst versuchte, es zu schreiben, aber nicht fand, wie, danke dafür :) –

0

ich habe versucht, diese Lösung Mouseevent:

public class ButtonAMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonA MouseListener code here 
} 

public class ButtonBMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonB MouseListener code here 
} 

public class ButtonCMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonC MouseListener code here 
} 

public class ButtonDMouseListener implements java.awt.event.MouseAdapter { 
    //implement ButtonD MouseListener code here 
} 

aber es zeigt mir einen Fehler über erweitert und implementiert, bu t unter Berücksichtigung dessen, was Sie sagte, dass ich eine Lösung finden:

I erstellt:

private void initButon(javax.swing.JButton jButtonInited, Reponse reponse, Quizz quizz) { 
    jButtonInited.addMouseListener(new java.awt.event.MouseAdapter() { 
     @Override 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      if (reponse.getVerif()) { 
       quizz.win(); 
      } else { 
       quizz.lose(); 
      } 
      quizz.endOfTurn(); 
      if (quizz.getCompteurQ() >= 5) { 
       Component frame = null; 
       JOptionPane.showMessageDialog(frame, "Score Final :" + quizz.getScore() + "\nBien Joué"); 
       initComponents(); 
      } else { 
       initGame(quizz); 
      } 
     } 
    }); 
} 

und damit kann ich die 4 Tasten wie folgt ansprechen:

initButon(jButtonA,reponseA,quizz); 

und es funktioniert gut, Ich denke, ich habe andere Methode, die das wieder brauchen, danke.

Verwandte Themen