私の小さなプログラムを進めていると、同じルールによるルールである4つのボタンがあり、コードを減らす方法がわかりません。単純化できるとほぼ確信しています:
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);
}
responseA/B/C/D と jButtonA/B/C/D が同じ命令に従っていることがわかります。受けたレッスンを復習しましたが、この問題の解決策はたくさんありましたが、何の助けにもなりませんでした。オンライン調査を試みましたが、関連がなかったか、解決策が適切ではありませんでした... 私の言ったことを理解していただければ幸いです (私は英語が堪能ではありません)。
Ps: メソッドのすべてのコードを許可しましたが、必要に応じて、完全に必要でない部分を削除できます。