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