刷新JFrame Java而不需要创建新的JFrame

5

我正在开发一个游戏,可以在商店中升级你的属性。当你购买某个物品时,应该刷新显示你拥有的金币数量的JLabel标签。

有没有一种方法可以做到这一点,而不需要创建新的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();
    }

这是ActionListener的代码,我希望刷新JFrame epix:
这里是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);

    }

你能否发布一些代码来展示吗?这会非常有帮助。 - user2891133
请发布类的其余部分 :) 至少我们可以看到JLabel在哪里以及它被添加到了哪里。 - user2891133
2个回答

2
menuCardPlayerLabel.setText(yourVariable);

没有刷新它太多 - Miguel Ângelo
3
好的,如果您编辑您的问题并将其变成一个工作示例,我们可以尝试解决它。 - user2891133

2

您不必刷新Frame或JPanel。 在ActionListener中,您需要像在levelauswahllistener中一样显示CardLayout“upgrade cards”。 然后它应该刷新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接