Java JLabel赢得';t更新

Java JLabel赢得';t更新,java,swing,Java,Swing,编辑版,我希望这是你要找的。我试图在这个版本中只保留必要的东西。我不知道还能写什么,但我不能上传这个编辑,因为代码太大,文本太小,所以我写随机的stuf 主要类别: package Clicker; import javax.swing.JFrame; public class mainClass { public static void main(String[] args) { ClickerGame CG = new ClickerGame();

编辑版,我希望这是你要找的。我试图在这个版本中只保留必要的东西。我不知道还能写什么,但我不能上传这个编辑,因为代码太大,文本太小,所以我写随机的stuf

主要类别:

package Clicker;

import javax.swing.JFrame;

public class mainClass {

     public static void main(String[] args) {


         ClickerGame CG = new ClickerGame();

            JFrame frame = new JFrame("CarCollectionarV1");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            CG.addComponentToPane(frame.getContentPane());

            frame.pack();
            frame.setVisible(true);
            frame.setResizable(true);
            frame.setSize(1000, 700);

     }
}
单击名称类:

package Clicker;

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

import javax.swing.*;

public class ClickerGame implements ActionListener {

       JButton jbtnMoney = new JButton("Click");
       JButton jbtnBoxes = new JButton("Click");

       final static String Click = "Click";

       //Make TabbedPane
        public void addComponentToPane(Container pane){

            jbtnMoney.addActionListener(this);
            jbtnBoxes.addActionListener(this);

        LabelsHolder Labels = new LabelsHolder(); // Imports JLabels

        //Visual        
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setTabPlacement(JTabbedPane.TOP);

        //MainPanel
        JPanel MainPanel = new JPanel();

        JPanel MainPanelSub = new JPanel();
        MainPanelSub.setLayout(new BoxLayout(MainPanelSub, BoxLayout.PAGE_AXIS));

        JPanel MainPanelSub2 = new JPanel();
        MainPanelSub2.setLayout(new BoxLayout(MainPanelSub2, BoxLayout.PAGE_AXIS));


        MainPanelSub.add(Labels.MoneyLabel);
        MainPanelSub.add(Labels.MoneyClicksLabel);
        MainPanelSub.add(jbtnMoney);
        MainPanelSub2.add(Labels.BoxesLabel);
        MainPanelSub2.add(Labels.BoxesClicksLabel);
        MainPanelSub2.add(jbtnBoxes);
        MainPanel.add(MainPanelSub);

        tabbedPane.addTab(Click, MainPanel);
        pane.add(tabbedPane, BorderLayout.CENTER);

        }

        MainHolder CarMain = new MainHolder();
        LabelsHolder Labels = new LabelsHolder();
         //Button Click

        public void actionPerformed(ActionEvent ae) {

        //Money Button Click
        if(ae.getSource() == jbtnMoney) {           
            CarMain.main[0] += 1;   
            CarMain.main[1] += 1;
            Labels.MoneyLabel.setText("Test");
        }
        }
}       
标签架类别:

package Clicker;

import javax.swing.JLabel;

class LabelsHolder {

    MainHolder CarMain = new MainHolder();


    public JLabel MoneyLabel = new JLabel();  
    public JLabel MoneyClicksLabel = new JLabel();
    public JLabel BoxesLabel = new JLabel();
    public JLabel BoxesClicksLabel = new JLabel();

    public LabelsHolder(){

        MoneyLabel.setHorizontalTextPosition(JLabel.CENTER);
        MoneyLabel.setVerticalTextPosition(JLabel.BOTTOM);
        MoneyLabel.setText("Money: " + CarMain.main[0]);

        MoneyClicksLabel.setHorizontalTextPosition(JLabel.CENTER);
        MoneyClicksLabel.setVerticalTextPosition(JLabel.BOTTOM);
        MoneyClicksLabel.setText("Money Clicks: " + CarMain.main[1]);

        BoxesLabel.setHorizontalTextPosition(JLabel.CENTER);
        BoxesLabel.setVerticalTextPosition(JLabel.BOTTOM);
        BoxesLabel.setText("Boxes: " + CarMain.main[2]);

        BoxesClicksLabel.setHorizontalTextPosition(JLabel.CENTER);
        BoxesClicksLabel.setVerticalTextPosition(JLabel.BOTTOM);
        BoxesClicksLabel.setText("Boxes Clicks: " + CarMain.main[3]);

    }
}   
主要持有人类别:

package Clicker;

public class MainHolder {

public Integer main[] = new Integer[4];

    public MainHolder(){

        MakeMain();     
    }

    public void MainMaker(int k,int p){

        main[p] = k;

    }

    public void MakeMain(){



        int i=0;
        MainMaker(0,i); // Money
        i++;
        MainMaker(0,i); // Money Clicks
        i++;
        MainMaker(0,i); // Boxes
        i++;
        MainMaker(0,i); // Boxes Clicks
        i++;
    }
}

您正在创建两个LabelsHolder实例:

class ClickerGame implements ActionListener {

        // ....
        LabelsHolder Labels = new LabelsHolder(); // **** here

        // Visual
        // .....
    }

    // and here!!!@
    MainHolder CarMain = new MainHolder();
    LabelsHolder Labels = new LabelsHolder();
这样做意味着您的ActionListener正在更改非可视化JLabel的状态。解决方案:只创建并使用一个。因此,去掉构造函数中声明的实例,而只使用实例字段

其他建议:

  • 你会想要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。学习这一点并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码
  • 您应该避免使用公共字段,并允许其他类直接访问这些字段。最好使用私有字段和公共方法来限制对象状态的暴露

什么是
标签
?这些类如何交互?请创建并发布一个有效的链接,以便我们能够更好地理解您的代码和问题(请阅读链接)。作为旁白,您需要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。学习并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码。此外,设置JLabel的文本后,无需调用
repaint()
。我的猜测是,您正在设置一个无法可视化的JLabel文本,但根据您目前发布的内容,我无法证明这一猜测。另外,我看到你已经编辑了你的问题,因为我在上面的评论,但还没有真正改善到足以回答。请帮助我们帮助您。@HovercraftFullOfEels我尝试过,编辑代码,希望您现在能理解。感谢您的更新--我知道这听起来很自私,但我想看到更多。而且更少。请尝试创建一个新的程序,一个小程序,但我们可以复制、粘贴到IDE中,并且实际运行时不做任何更改,这为我们显示了问题所在,一个有效的(请再次阅读链接)。这将作为你的问题代码发布在这里,就像你上面发布的代码一样,而不是发布在链接中。如果你能把这篇文章贴出来并且做得好,我几乎可以保证你会得到及时的答复。