Frage

Ich versuche, ein ImageIcon eines Objekts der Klasse Bishop anzuzeigen.ImageIcon wird mit getImage() abgerufen.Das zurückgegebene ImageIcon wird in der Referenz m gespeichert, aber nicht angezeigt, und ein anderes ImageIcon h, das direkt geladen wird, wird angezeigt.Welchen Fehler mache ich?

import javax.swing.*;

//Game.java

public class Game {

    public static void main(String[] args) {
        board b = new board();
        bishop bis1 = new bishop();
        bis1.setLocation(0, 0);
        ImageIcon m = bis1.getImage();
        b.squares[0][1].add(new JLabel(m));
        ImageIcon h = new ImageIcon("rook.png");
        b.squares[0][0].add(new JLabel(h));
    }
}

//bishop.java
import javax.swing.*;
import java.awt.*;

public class bishop {
    private ImageIcon img;
    private int row;
    private int col;

    public void bishop() {
        img = new ImageIcon("bishop.png");
    }

    public void setLocation(int i, int j) {
        row = i;
        col = j;
    }

    public int getX() {
        return row;
    }

    public int getY() {
        return col;
    }

    public ImageIcon getImage() {
        return img;
    }
}

// board.java
import javax.swing.*;
import java.awt.*;

public class board {
public JFrame frame;
public JPanel squares[][] = new JPanel[3][3];

public board() {
frame = new JFrame("Simplified Chess");
frame.setSize(900, 400);
frame.setLayout(new GridLayout(2,3));

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) {
        squares[i][j] = new JPanel();

        if ((i + j) % 2 == 0) {
            squares[i][j].setBackground(Color.black);
        } else {
            squares[i][j].setBackground(Color.white);
        }   
        frame.add(squares[i][j]);
     }
   }

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
  }

}
War es hilfreich?

Lösung

Sie haben Ihren Konstruktor falsch definiert – mit einem unnötigen void.Deshalb Ihr Bishop Die Klasse ruft den standardmäßig leeren Konstruktor auf, also Ihre Variable img ist nie richtig eingestellt.Entfernen Sie es, damit Ihr Konstruktor korrekt aufgerufen wird:

An Stelle von:

public void bishop() {
        img = new ImageIcon("bishop.png");
    }

Definieren Sie es ohne Lücke:

public bishop() {
            img = new ImageIcon("bishop.png");
        }

Andere Tipps

Es gibt nicht genug von Ihrem Code, der für mich gezeigt wurde, um genau zu erfahren.Ich muss die Board-Klasse sehen (BTW: Klassennamen sollten in Java aktiviert werden: board.java)

Aber ich vermute, dass es mit der Art, wie die Board-Klasse das Layout Ihres Boards macht, zu tun ist.

Kannst du nur den Bischof laden und anzeigen?Das wird feststellen, ob das Problem den Bischof findet und laden kann.Der folgende Code wird das tun, was dazu beitragen, mögliche Ursachen zu beseitigen: generasacodicetagpre.

Was genau ist Board?Ich gehe davon aus, dass es etwas ist, das eine Schwenkkomponente wie einen JFrame ausdehnt?

Alle GUI-Zugehörige Ereignisse sollten auf dem Ereignis-Dispatcher-Thread (EDT) erfolgen.Dieser Thread kümmert sich um die Aktualisierung der GUI.In Fällen, in denen Sie die GUI von einer anderen Klasse aktualisieren müssen, müssen Sie Schwingutensilien.invokelater () : generasacodicetagpre.

einfachste Lösung: Laden Sie die Bilder in Ihren Projektordner hoch. Sie können ein JLABEL zum Beispiel verwenden, um Bilder einzugeben. Dann schreiben Sie Ihren Code als folgendes Beispiel: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top