Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel)

asuchu

Neues Mitglied
Hey Leute :)
ich hab in der Uni ein Projekt und hab da schon einiges hinbekommen aber es scheitert gerade noch an einigen Sachen bezüglicher der GUI und der Kartendarstellung ich hoffe das ihr mir helfen könnt.
Es handelt sich beim Projekt um das Kartenspiel UNO dies soll über ein Netzwerk erfolgen also sollen maximal vier Spieler das Spiel spielen können, die Netzwerkverbindung hab ich schon.
Im Prinzip hab ich eine Klasse Card und die extends JLabel und über eine LinkedList komm ich quasi an die Karten der Spieler ran die befindet sich in der Klasse Game.
Ich bekomme es gerade einfach nicht hin... sobald ich auf die Liste zugreife bekomme ich nur NullPointer XD .. und ich weiß noch nicht wie das mit den jeweiligen Clients und ihren Kartendarstellungen machen soll. Ich hoffe ihr könnt mir etwas helfen eventuell hab ich einen riesigen Denkfehler > ___ <

Die Klasse Card:
Java:
public class Card extends JLabel implements CardInterface{
    public final static Card[] possibleCards = new Card[]{
            new Card(MyColor.BLAU, 0, new ImageIcon ("./bin/Blau_0.png")),
            new Card(MyColor.BLAU, 1, new ImageIcon ("./bin/Blau_1.png")),
            new Card(MyColor.BLAU, 2, new ImageIcon ("./bin/Blau_2.png")),
            new Card(MyColor.BLAU, 3, new ImageIcon ("./bin/Blau_3.png")),
            new Card(MyColor.BLAU, 4, new ImageIcon ("./bin/Blau_4.png")),
            new Card(MyColor.BLAU, 5, new ImageIcon ("./bin/Blau_5.png")),
            new Card(MyColor.BLAU, 6, new ImageIcon ("./bin/Blau_6.png")),
            new Card(MyColor.ROT, 0, new ImageIcon ("./bin/Rot_0.png")),
            new Card(MyColor.ROT, 1, new ImageIcon ("./bin/Rot_1.png")),
            new Card(MyColor.ROT, 2, new ImageIcon ("./bin/Rot_2.png")),
            new Card(MyColor.ROT, 3, new ImageIcon ("./bin/Rot_3.png")),
            new Card(MyColor.ROT, 4, new ImageIcon ("./bin/Rot_4.png")),
            new Card(MyColor.ROT, 5, new ImageIcon ("./bin/Rot_5.png")),
            new Card(MyColor.ROT, 6, new ImageIcon ("./bin/Rot_6.png")),
            new Card(MyColor.GELB, 0, new ImageIcon ("./bin/Gelb_0.png")),
            new Card(MyColor.GELB, 1, new ImageIcon ("./bin/Gelb_1.png")),
            new Card(MyColor.GELB, 2, new ImageIcon ("./bin/Gelb_2.png")),
            new Card(MyColor.GELB, 3, new ImageIcon ("./bin/Gelb_3.png")),
            new Card(MyColor.GELB, 4, new ImageIcon ("./bin/Gelb_4.png")),
            new Card(MyColor.GELB, 5, new ImageIcon ("./bin/Gelb_5.png")),
            new Card(MyColor.GELB, 6, new ImageIcon ("./bin/Gelb_6.png")),
            new Card(MyColor.GRUEN, 0, new ImageIcon ("./bin/Grün_0.png")),
            new Card(MyColor.GRUEN, 1, new ImageIcon ("./bin/Grün_1.png")),
            new Card(MyColor.GRUEN, 2, new ImageIcon ("./bin/Grün_2.png")),
            new Card(MyColor.GRUEN, 3, new ImageIcon ("./bin/Grün_3.png")),
            new Card(MyColor.GRUEN, 4, new ImageIcon ("./bin/Grün_4.png")),
            new Card(MyColor.GRUEN, 5, new ImageIcon ("./bin/Grün_5.png")),
            new Card(MyColor.GRUEN, 6, new ImageIcon ("./bin/Grün_6.png")),
            new Card(MyColor.GRUEN, EffectCard.ZiehZwei, new ImageIcon ("./bin/Grün_+2.png")),
            new Card(MyColor.ROT, EffectCard.ZiehZwei, new ImageIcon ("./bin/Rot_+2.png")),
            new Card(MyColor.BLAU, EffectCard.ZiehZwei, new ImageIcon ("./bin/blau_+2.png")),
            new Card(MyColor.GELB, EffectCard.ZiehZwei, new ImageIcon ("./bin/Gelb_+2.png")),
            new Card(MyColor.GRUEN, EffectCard.Richtungswechsel, new ImageIcon ("./bin/Grün_Richtungswechsel.png")),
            new Card(MyColor.ROT, EffectCard.Richtungswechsel, new ImageIcon ("./bin/Rot_Richtungswechsel.png")),
            new Card(MyColor.BLAU, EffectCard.Richtungswechsel, new ImageIcon ("./bin/Blau_Richtungswechsel.png")),
            new Card(MyColor.GELB, EffectCard.Richtungswechsel, new ImageIcon ("./bin/Gelb_Richtungswechsel.png")),
            new Card(MyColor.GRUEN, EffectCard.Aussetzen, new ImageIcon ("./bin/Grün_Aussetzen.png")),
            new Card(MyColor.ROT, EffectCard.Aussetzen, new ImageIcon ("./bin/Rot_Aussetzen.png")),
            new Card(MyColor.BLAU, EffectCard.Aussetzen, new ImageIcon ("./bin/Blau_Aussetzen.png")),
            new Card(MyColor.GELB, EffectCard.Aussetzen, new ImageIcon ("./bin/Gelb_Aussetzen.png")),
            new Card(MyColor.SCHWARZ, EffectCard.ZiehVierFarbwahl, new ImageIcon ("./bin/Schwarz_+4.png")),
            new Card(MyColor.SCHWARZ, EffectCard.Farbwahl, new ImageIcon ("./bin/Schwarz_Farbauswahl.png")),
           
   
   
    };
   
    private final MyColor color;
    private final EffectCard effectCard;
    //actionCard?
    private final int value;
   

    /**
     * Constructor
     * @param c the color of this card
     * @param v its value
     * @throws {@link IllegalArgumentException} if c is null or v is not in range of 0-9
     */
    public Card(MyColor c, int v, ImageIcon bild){
        if(c == null)
            throw new IllegalArgumentException("Karte muss eine Farbe haben!");
        if(v < 0 || v > 9) throw new IllegalArgumentException("Karte muss einen wert zwischen 0-9 haben!");
        color = c;
        value = v;
        this.setIcon(bild);
        effectCard = null;
    }
   
    public Card(MyColor c, EffectCard ec, ImageIcon bild){
        if(c == null)
            throw new IllegalArgumentException("Karte muss eine Farbe haben!");
        color = c;
        value = -1;
        this.setIcon(bild);
        effectCard = ec;
    }
   
    public Card(String color, String value, String effect){
        System.out.println(color);
        System.out.println(value);
        System.out.println(effect);
        if(effect.equals("null") ||effect.equals(-1)){
            effectCard = null;
        } else if(effect.equals("ZiehZwei")){
            effectCard = EffectCard.ZiehZwei;
        } else if(effect.equals("ZiehVierFarbwahl")){
            effectCard = EffectCard.ZiehVierFarbwahl;
        } else if(effect.equals("Farbwahl")){
            effectCard = EffectCard.Farbwahl;
        } else if(effect.equals("Richtungswechsel")){
            effectCard = EffectCard.Richtungswechsel;
        } else if(effect.equals("Aussetzen")){
            effectCard = EffectCard.Aussetzen;
        } else {
            System.out.println(effect);
            throw new IllegalArgumentException("ERROR");
        }
        this.value = Integer.valueOf(value);
        if(color.equals("SCHWARZ")){
            this.color = MyColor.SCHWARZ;
        }
        else if(color.equals("BLAU")){
            this.color = MyColor.BLAU;
        }
        else if(color.equals("GELB")){
            this.color = MyColor.GELB;
        }
        else if(color.equals("ROT")){
            this.color = MyColor.ROT;
        }
        else if(color.equals("GRUEN")){
            this.color = MyColor.GRUEN;
        } else {

            throw new IllegalArgumentException("ERROR");
        }

       
    }
    /**
     *
     * @return color, effectCard and value
     */
   
    public MyColor getColor() {
        return color;
    }

    public EffectCard getEffectCard() {
        return effectCard;
    }

    public int getValue() {
        return value;
    }
   
    public String toString(){
        return "Karte: " + getColor() + " " + getValue() + " " + getEffectCard();
    }
   
    @Override
    public boolean equals(Object o){
        if(!(o instanceof Card)){
            return super.equals(o);
        }
        Card oth = (Card) o;
        System.out.println(oth);
        return oth.color == color && oth.value == value && oth.effectCard == effectCard;
       
    }
}

Die Klasse Game:
Java:
public class Game {

    private LinkedList<Player> player;
    private boolean gameOver;
    private Stack<Card> cardDeck;
    private int yourTurn = 0;
    private boolean rotation = true;

    public Player getPlayerYourTurn() {
        return player.get(yourTurn % player.size());
    }

    public Game() {
        player = new LinkedList<>();
        cardDeck = new Stack<>();
    }

    public void addPlayer(Player p) {
        player.add(p);
    }

    public boolean playCard(Card c, String s) {
        Optional<Player> game = player.stream().filter(sp -> sp.getUser().equals(s)).findAny();
        if (!game.isPresent() || c == null)
            return false;
        Player sp = game.get();
        Optional<Card> ownCard = sp.getCard().stream().filter(kar -> kar.equals(c)).findAny();
        if(!ownCard.isPresent()){
            return false;
        }
        Card k = ownCard.get();
         Card oben = cardDeck.peek();
         boolean nextRound = false;
        if (oben == null) {
            nextRound = true;
        } else if (k.getColor().equals(MyColor.SCHWARZ)) {
            nextRound = true;       
        } else if (k.getColor().equals(oben.getColor())) {
            nextRound = true;
        }
        if(nextRound){
            sp.getCard().remove(k);
            cardDeck.push(k);
            try {
                sp.sendHand();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(k.getEffectCard() != null){
                if(k.getEffectCard() == EffectCard.Aussetzen){
                    yourTurn = (rotation)? yourTurn+1:yourTurn-1;
                } else if (k.getEffectCard() == EffectCard.Farbwahl){
                    //TODO hängt von der GUI ab
                } else if (k.getEffectCard() == EffectCard.Richtungswechsel){
                    rotation = !rotation;
                } else if (k.getEffectCard() == EffectCard.ZiehVierFarbwahl){
                    int next = (rotation)? yourTurn+1:yourTurn-1;
                    player.get(next % player.size()).getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
                    player.get(next % player.size()).getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
                    player.get(next % player.size()).getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
                    player.get(next % player.size()).getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
                   
                    //TODO Farbwechsel
                } else if (k.getEffectCard() == EffectCard.ZiehZwei){
                    int next = (rotation)? yourTurn+1:yourTurn-1;
                    player.get(next % player.size()).getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
                    player.get(next % player.size()).getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
                   
                }
            }
            yourTurn = (rotation)? yourTurn+1:yourTurn-1;
            for(Player PlayerNew : player){
                try {
                    PlayerNew.getClient().writeUTF("Kartenstapel: " + k.toString());
                    PlayerNew.getClient().writeUTF("Zug: " + getPlayerYourTurn().getUser());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return true;
           
        }
        return false;
    }

   
   
    public void start() {
        // Anzahl der Karten am Anfang
        int nrOfCards = 7;
        for (Player p : player) {
            for (int i = 0; i < nrOfCards; i++) {
                p.getCard().add(Card.possibleCards[(int) Math.round((Math.random() * Card.possibleCards.length))]);
            }
        }

        for (Player p : player) {
            try {
                p.sendHand();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    public boolean gewonnen() {
        return player.stream().filter(p -> p.getCard().isEmpty()).count() > 0;
    }

}

Ich muss aber sagen das ich GUI und so nicht wo wirklich kann ich versteh das nicht >_ < falls ihr noch was braucht könnt ihr das ja kommentieren ich füg das nachträglich nach.
Und das war mein Versuch:
Java:
    private JLabel getLbKarte() {
        if (lbKarte == null) {
            lbKarte = new Card (MyColor.ROT, 2 , new ImageIcon("./bin/Rot_0.png"));
            lbKarte.setBounds(321, 468, 355, 162);
            int i = 0;
            for (Card card : game.getPlayerYourTurn().getCard()) {
                lbKarte.add(card, i++);
            }
           
        }
        return lbKarte;
    }
 

Robat

Top Contributor
Bevor wir jetzt hier den ganzen Code durchlesen:

Poste mal den Stacktrace. An welcher Stelle kommt der Fehler genau?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
D Swing JLabels in einer Schleife aktualisieren AWT, Swing, JavaFX & SWT 2
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
kilopack15 JLabels im Array erzeugen AWT, Swing, JavaFX & SWT 2
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
B Swing HTML in JLabels AWT, Swing, JavaFX & SWT 6
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
I Jlabels Addieren AWT, Swing, JavaFX & SWT 3
X Swing ListDialog von Oracle mit JLabels AWT, Swing, JavaFX & SWT 2
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
M Position eines JLabels mit getX() auslesen AWT, Swing, JavaFX & SWT 2
M Position eines JLabels speichern? AWT, Swing, JavaFX & SWT 3
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
N Meine JLabels werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
L Name des JLabels auslesen bei Mouseclick AWT, Swing, JavaFX & SWT 2
C Swing JLabels entfernen und neue einfügen AWT, Swing, JavaFX & SWT 6
S Textfelder JLabels AWT, Swing, JavaFX & SWT 3
J JLabels repainten AWT, Swing, JavaFX & SWT 4
Balbes Swing Mehrere JLabels vereinen AWT, Swing, JavaFX & SWT 2
M In Jlist auf Änderungen von mehreren JLabels reagieren AWT, Swing, JavaFX & SWT 3
bugmenot Dynamisch erzeugte jLabels werden nicht angezeigt. AWT, Swing, JavaFX & SWT 5
S Probleme beim Neuzeichnen eines JLabels AWT, Swing, JavaFX & SWT 6
B Problem bei Textänderung eines JLabels AWT, Swing, JavaFX & SWT 5
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
B Erneuern der Informationen in der GUI und JTable und JLabels AWT, Swing, JavaFX & SWT 2
B zwei JLabels überlappen lassen AWT, Swing, JavaFX & SWT 5
I JScrollPane, wenn JLabels x Pixel erreichen AWT, Swing, JavaFX & SWT 3
K dynamische jlabels AWT, Swing, JavaFX & SWT 21
F Farbiger Text in JLabels AWT, Swing, JavaFX & SWT 9
L Hinzufügen eines JLabels AWT, Swing, JavaFX & SWT 4
U Bilder, JLabels, JButtons voreinander AWT, Swing, JavaFX & SWT 7
loadbrain 3 JLabels untereinander ohne Abstand AWT, Swing, JavaFX & SWT 4
J jlabels überlappen / vorder-hintergrund AWT, Swing, JavaFX & SWT 2
X Focusproblem beim Refresh eines jLabels AWT, Swing, JavaFX & SWT 4
B Update von JLabels AWT, Swing, JavaFX & SWT 2
J GridBagLayout JLabels links ausrichten + vertikaler Freiraum AWT, Swing, JavaFX & SWT 4
G JLabels mehrmals erstellen AWT, Swing, JavaFX & SWT 7
G der sinn von labels/jlabels ? AWT, Swing, JavaFX & SWT 3
V Probleme mit JLabels AWT, Swing, JavaFX & SWT 4
D Font eines JLabels verändern, JLabel mit LookAndFeel-Format AWT, Swing, JavaFX & SWT 2
J Farbverlauf als Hintergrund eines JLabels AWT, Swing, JavaFX & SWT 4
L Größe eines JLabels an enthaltenen Text anpassen AWT, Swing, JavaFX & SWT 2
B Problem mit JLabels und deren Inhalt AWT, Swing, JavaFX & SWT 2
T Größe und Position eines JLabels ermitteln AWT, Swing, JavaFX & SWT 3
P JLabels übereinander legen AWT, Swing, JavaFX & SWT 8
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben