Reputation: 128
I'm working on a game where you can upgrade your stats in a shop. When you buy something it should refresh the JLabel which shows your Coins
Is there a way to do that without doing a new JFrame?
public void actionPerformed(ActionEvent e) {
user.setCoin(user.getCoin() - 5);
user.setMaxJump(5);
EpixController.getInstance().coinsUpdate(user, -5);
SwingUtilities.updateComponentTreeUI(epix);
epix.revalidate();
epix.repaint();
}
This is the code of the ActionListener where I want to refresh the JFrame epix
Here's the code of the View
public EpixView(User user) {
this.setUser(user);
JFrame epix = new JFrame();
System.out.println(user.getMaxJump());
epix.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
epix.setResizable(false);
epix.setBounds(100, 100, 801, 523);
epix.setLocationRelativeTo(null);
epix.getContentPane().removeAll();
/*
* menuCard
*/
menuCard.setLayout(null);
//coin
menuCardCoinImage.setBounds(0, 10, 64, 64);
menuCard.add(menuCardCoinImage);
menuCardCoinImage.setIcon(new ImageIcon(coinSpinPath));
menuCardCoinLabel = new JLabel("" + getUser().getCoin());
menuCardCoinLabel.setFont(new Font("Modern No. 20", Font.PLAIN, 26));
menuCardCoinLabel.setBounds(67, 10, 56, 64);
menuCard.add(menuCardCoinLabel);
//player
menuCardPlayerLabel = new JLabel("Willkommen zurück, " + getUser().getUsername());
menuCardPlayerLabel.setBounds(598, 18, 239, 36);
menuCard.add(menuCardPlayerLabel);
spielenButton.setBounds(485, 319, 89, 23);
menuCard.add(spielenButton);
ranglisteButton.setBounds(485, 353, 89, 23);
menuCard.add(ranglisteButton);
menuCardBackgroundImage.setIcon(new ImageIcon(backgroundPath));
menuCardBackgroundImage.setBounds(0, 0, 801, 523);
menuCard.add(menuCardBackgroundImage);
cards.add(menuCard, "menuCard");
/*
* upgradeCard
*/
upgradeCard.setLayout(null);
//coin
upgradeCardCoinImage.setBounds(0, 10, 64, 64);
upgradeCardCoinImage.setIcon(new ImageIcon(coinSpinPath));
upgradeCard.add(upgradeCardCoinImage);
upgradeCardCoinLabel = new JLabel(""+ getUser().getCoin());
upgradeCardCoinLabel.setBounds(67, 10, 56, 64);
upgradeCardCoinLabel.setFont(new Font("Modern No. 20", Font.PLAIN, 26));
upgradeCard.add(upgradeCardCoinLabel);
//player
upgradeCardPlayerLabel = new JLabel("Willkommen zurück, " + getUser().getUsername());
upgradeCardPlayerLabel.setBounds(598, 18, 239, 36);
upgradeCard.add(upgradeCardPlayerLabel);
//maxHealthBar
healthLabel.setHorizontalAlignment(SwingConstants.RIGHT);
healthLabel.setBounds(191, 127, 110, 36);
upgradeCard.add(healthLabel);
JProgressBar maxHealthBar = new JProgressBar();
maxHealthBar.setValue(0);
maxHealthBar.setBounds(327, 127, 185, 36);
upgradeCard.add(maxHealthBar);
plusHealthButton.setBounds(522, 130, 41, 30);
upgradeCard.add(plusHealthButton);
//maxJumpBar
jumpLabel.setHorizontalAlignment(SwingConstants.RIGHT);
jumpLabel.setBounds(191, 174, 110, 36);
upgradeCard.add(jumpLabel);
JProgressBar maxJumpBar = new JProgressBar();
maxJumpBar.setValue(0);
maxJumpBar.setBounds(327, 174, 185, 36);
upgradeCard.add(maxJumpBar);
plusJumpButton.setBounds(522, 177, 41, 30);
plusJumpButton.addActionListener(new PlusJumpListener(getUser(), maxJumpBar, epix));
upgradeCard.add(plusJumpButton);
//maxSpeed
speedLabel.setHorizontalAlignment(SwingConstants.RIGHT);
speedLabel.setBounds(191, 221, 110, 36);
upgradeCard.add(speedLabel);
JProgressBar maxSpeedBar = new JProgressBar();
maxSpeedBar.setValue(0);
maxSpeedBar.setBounds(327, 221, 185, 36);
upgradeCard.add(maxSpeedBar);
plusSpeedButton.setBounds(522, 224, 41, 30);
upgradeCard.add(plusSpeedButton);
//damageBar
damageLabel.setHorizontalAlignment(SwingConstants.RIGHT);
damageLabel.setBounds(191, 268, 110, 36);
upgradeCard.add(damageLabel);
JProgressBar damageBar = new JProgressBar();
damageBar.setValue(0);
damageBar.setBounds(327, 268, 185, 36);
upgradeCard.add(damageBar);
plusDamageButton.setBounds(522, 271, 41, 30);
upgradeCard.add(plusDamageButton);
levelAuswählenButton.setBounds(395, 361, 168, 30);
upgradeCard.add(levelAuswählenButton);
upgradeZurückButton.setBounds(254, 361, 131, 30);
upgradeCard.add(upgradeZurückButton);
upgradeCardBackgroundImage.setBounds(0, 0, 801, 523);
upgradeCardBackgroundImage.setIcon(new ImageIcon(backgroundPath));
upgradeCard.add(upgradeCardBackgroundImage);
cards.add(upgradeCard, "upgradeCard");
/*
* levelAuswahlCard
*/
levelAuswahlCard.setLayout(null);
level1Button.setBounds(67, 159, 171, 170);
EpixController.getInstance().checkLevelSaved(user, level1Button);
levelAuswahlCard.add(level1Button);
level2Button.setBounds(308, 159, 171, 170);
EpixController.getInstance().checkLevelSaved(user, level2Button);
levelAuswahlCard.add(level2Button);
bossLevelButton.setBounds(550, 159, 171, 170);
EpixController.getInstance().checkLevelSaved(user, bossLevelButton);
levelAuswahlCard.add(bossLevelButton);
levelZurückBtton.setBounds(334, 378, 121, 28);
levelAuswahlCard.add(levelZurückBtton);
levelAuswahlCardCoinImage.setBounds(0, 10, 64, 64);
levelAuswahlCardCoinImage.setIcon(new ImageIcon(coinSpinPath));
levelAuswahlCard.add(levelAuswahlCardCoinImage);
levelAuswahlCardCoinLabel = new JLabel("" + getUser().getCoin());
levelAuswahlCardCoinLabel.setBounds(67, 10, 56, 64);
levelAuswahlCardCoinLabel.setFont(new Font("Modern No. 20", Font.PLAIN, 26));
levelAuswahlCard.add(levelAuswahlCardCoinLabel);
levelAuswahlCardPlayerLabel = new JLabel("Willkommen zurück, " + getUser().getUsername());
levelAuswahlCardPlayerLabel.setBounds(598, 18, 239, 36);
levelAuswahlCard.add(levelAuswahlCardPlayerLabel);
levelAuswahlCardBackgroundImage.setIcon(new ImageIcon(backgroundPath));
levelAuswahlCardBackgroundImage.setBounds(0, 0, 801, 523);
levelAuswahlCard.add(levelAuswahlCardBackgroundImage);
cards.add(levelAuswahlCard, "levelAuswahlCard");
/*
* Listener
*/
//menuCard
spielenButton.addActionListener(new MenuCardButtonListener(cards));
//upgradeCard
upgradeZurückButton.addActionListener(new UpgradeCardButtonListener(cards));
levelAuswählenButton.addActionListener(new UpgradeCardButtonListener(cards));
//levelAuswahlCard
levelZurückBtton.addActionListener(new LevelAuswahlCardButtonListener(cards, getUser(), epix));
level1Button.addActionListener(new LevelAuswahlCardButtonListener(cards, getUser(), epix));
level2Button.addActionListener(new LevelAuswahlCardButtonListener(cards, getUser(), epix));
bossLevelButton.addActionListener(new LevelAuswahlCardButtonListener(cards, getUser(), epix));
epix.setContentPane(cards);
epix.setVisible(true);
}
Upvotes: 5
Views: 122
Reputation: 212
You don't have to refresh the Frame or the JPanel. In the Actionlistener you will have to show the CardLayout 'upgrade cards' like you have done it in the levelauswahllistener. Then it should refresh it.
Upvotes: 2