Ich kodiere ein Memory-Matching-Spiel mit Bildern und einem JButton-Array, aber ich habe ein Problem beim Versuch, zwei Schaltflächen, die geklickt wurden, zu vergleichen. Wie speichern Sie den Index von/erhalten Sie den Index der zweiten Schaltfläche? Alle meine Buttons im Button-Array sind mit dem gleichen actionListener verknüpft, aber e.getSource() bekommt, soweit mir bekannt ist, nur den ersten Button angeklickt. Ich würde wirklich etwas Hilfe schätzen. (Ich habe nicht in meinem ganzen Code einfügen möchten, denn das ist eine Menge, also bin ich gerade dabei in Teilen ich denke, sind relevant):Wie bekomme ich die Quelle mehrerer JButtons in Aktion Listener?
public DisplayMM(ActionListener e)
{
setLayout(new GridLayout(6, 8, 5, 5));
JButton[] cards = new JButton[48]; //JButton board
for(int x = 0; x < 48; x++) //initial setup of board
{
cards[x] = new JButton();
cards[x].addActionListener(e);
cards[x].setHorizontalAlignment(SwingConstants.CENTER);
cards[x].setPreferredSize(new Dimension(75, 95));
}
private class e implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i < 48; i++)
{
if((e.getSource())==(cards[i]))//1st button that was clicked
{
cards[i].setIcon(new ImageIcon(this.getClass().getResource(country[i])));
currentIndex = i;
}
}
//cards[i].compareIcons(currentIndex, secondIndex);
}
}
Auch in meinem Panel-Klasse, ich versuchte zu tun etwas ähnliches, aber es wurde schließlich in die Klasse Display verschoben, da Panel keinen Zugriff auf das Schaltflächen-Array hatte.
//Panel
public void actionPerformed(ActionEvent e)
{
/*every 2 button clicks it does something and decreases num of tries*/
noMatchTimer = new Timer(1000, this);
noMatchTimer.setRepeats(false);
JButton source = (JButton)e.getSource();
guess1 = source.getText(); //first button clicked
numGuess++; //keeps track of number of buttons clicked
JButton source2 = (JButton)e.getSource();
guess2 = source2.getText();
numGuess++;
if(numGuess == 1)
display.faceUp(cards, array, Integer.parseInt(e.getSource()));
else
display.compareIcons(guess1, guess2);
if(tries != 12 && count == 24)
{
displayWinner();
}
}
Können Sie das näher erläutern? Wie würde ich den letzten Knopf auf Null setzen? – mk8139
@ mk8139: siehe Beispiel oben –
Vielen Dank, das war sehr hilfreich! – mk8139