Odświeżanie JFrame?

0

Witam. Jest to mój pierwszy post na forum.
Zwracam się z prośbą o sprawdzenie kodu, gdyż ja już na prawdę nie mam głowy (dopiero się uczę, a internet nie dał mi pożądanych wyników, program oczywiście też w celach edukacyjnych). Otóż chodzi o to, by po wciśnięciu klawisza odświeżały się karty, myślę, że odświeżanie paneli następuje, a problem tkwi w klasie Deck.
Jeśli ktoś zainteresuje się tematem dam resztę kodu. Pozdrawiam :-)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MainFrame extends JFrame implements ActionListener {
    private Deck taliaKart;
    private CommunityCardsPanel kartyWspolne;
    private HandsCardsPanel receStartowe;
    private JLabel background;
    private JButton odswiez;

    public MainFrame() {
        super("Poker Texas Hold'em");
        setSize(430, 255);
        setLocationRelativeTo(this);
        setResizable(false);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        taliaKart = new Deck();

        kartyWspolne = new CommunityCardsPanel(taliaKart);
        kartyWspolne.setOpaque(false);
        kartyWspolne.setBounds(10, 10, 420, 106);
        add(kartyWspolne);

        receStartowe = new HandsCardsPanel(taliaKart);
        receStartowe.setOpaque(false);
        receStartowe.setBounds(10, 116, 164, 106);
        add(receStartowe);

        odswiez = new JButton("Odśwież");
        odswiez.setBounds(174, 116, 100, 32);
        odswiez.addActionListener(this);
        add(odswiez);

        background = new JLabel(new ImageIcon("images/background.png"));
        background.setOpaque(false);
        background.setBounds(0, 0, 424, 223);
        add(background);
    }

    public void actionPerformed(ActionEvent arg0) {
        if (arg0.getSource() == odswiez) {
            taliaKart = new Deck();
            kartyWspolne.revalidate();
            kartyWspolne.repaint();
        }
    }
}
public class Deck {
    private SimpleCard[] deck;
    private int index = 0;

    public Deck() {
        deck = new SimpleCard[52];
        SimpleCard temp[] = new SimpleCard[52];
        Losowanie los = new Losowanie(52);

        for (int i = 0; i < 52; i++) {
            temp[i] = new SimpleCard(Integer.toString(i + 1));
            deck[los.get()] = temp[i];
        }
    }

    public SimpleCard nextCard() {
        index++;
        return deck[index - 1];
    }
}
0

Musisz jeszcze przekazać do kartyWspolne nową wartość taliaKart. Być może najprościej będzie skonstruowań ponownie kartyWspolne.

0

Zarówno do kartyWspolne jak i receStartowe muszę przekazać tę wartość, w obsłudze przycisku podałem tylko przykład. Ale jak przekazać tę wartość? Daję jeszcze kod klasy obiektu kartyWspolne, analogicznie wygladaja rece startowe.

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class CommunityCardsPanel extends JPanel {
    private BufferedImage[] image;
    private BufferedImage shadow;

    public CommunityCardsPanel(Deck deck) {
        image = new BufferedImage[5];
        for (int i = 0; i < 5; i++)
            image[i] = deck.nextCard().getImage();

        try {
            shadow = ImageIO.read(new File("images/cards/shadow.png"));
        } catch (IOException e) {
            System.err.println("Nie udalo sie wczytac pliku shadow.png");
        }
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        g2d.drawImage(shadow, 0, 0, this);
        g2d.drawImage(image[0], 0, 0, this);

        for (int i = 1; i < 5; i++) {
            g2d.drawImage(shadow, (image[i].getWidth() + 10) * i, 0, this);
            g2d.drawImage(image[i], (image[i].getWidth() + 10) * i, 0, this);
        }
    }
}

EDIT:
Ojeeeej :D Ale jestem lekko mówiąc tępy :P
dodałem funkcję kartyWspolne.setDeck(Deck deck) i oczywiście wszystko działa - Podstawy podstaw haha :)
Dziękuję za pomoc, pozdrawiam :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0