Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

refresh JFrame Java without doing new JFrame

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);

    }
like image 639
Miguel Ângelo Avatar asked Sep 29 '22 00:09

Miguel Ângelo


2 Answers

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.

like image 187
uniking Avatar answered Oct 06 '22 18:10

uniking


menuCardPlayerLabel.setText(yourVariable);
like image 28
user2891133 Avatar answered Oct 06 '22 18:10

user2891133