JLabel Images Array

Ich versuche, dasselbe mit jlabel gespeicherte Bild zweimal in ein Gridlayout-Bedienfeld zu laden. Anstatt jedoch zwei Instanzen des Bildes zu erstellen, wird das Bild nur einmal angezeigt und dann verschoben.

Wie kann ich dieselbe JLabel-Position im pieces-Array in mehr als einem JLabel im boardLabels-Array speichern?

Vielen Dank :)

public static JPanel boardPanel = new JPanel(new GridLayout(4, 0));
public static JLabel pieces[] = new JLabel[2];
private static JLabel[] boardLabels = new JLabel[4];

public MainFrame() {
    pieces[0] = new JLabel(new ImageIcon(System.getProperty("user.dir") + "/images/piece1.png"));
    pieces[1] = new JLabel(new ImageIcon(System.getProperty("user.dir") + "/images/piece2.png"));

    this.add(boardPanel);
    displayGUIboard();
}


public static void displayGUIboard() {

    //ERROR - the label in pieces[0] is not copied into both boardLabels [0] and [1]
    boardLabels[0] = pieces[0];
    boardLabels[1] = pieces[0];

    boardPanel.add(boardLabels[0]);
    boardPanel.add(boardLabels[1]);
}

public static void main(String[] args) {
    MainFrame frame = new MainFrame();
    frame.setVisible(true);
    frame.setSize(600, 600);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

Das funktioniert

    boardLabels[0] = new JLabel(pieces[1]);
    boardLabels[1] = new JLabel(pieces[1]);

Wenn ich ImageIcons verwende, möchte ich dies jedoch vermeiden, da ich zum Aktualisieren der Karte die JLabels entfernen und neu laden muss. Ich würde es vorziehen, nur die bereits geladenen Etiketten zu aktualisieren.

bearbeiten Ich habe es bereits versucht, aber es wird eine Nullzeiger-Ausnahme ausgelöst ...

    boardLabels[0].setIcon(pieces[1]);
    boardLabels[1].setIcon(pieces[1]);

    boardPanel.add(boardLabels[0]);
    boardPanel.add(boardLabels[1]);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage