Java 使用静态整数更新JLabel

Java 使用静态整数更新JLabel,java,Java,所以我是Java新手,去年我在高中上了一节课,想尝试制作我自己的2d小游戏。我有一个stats.java,里面充满了我想要存储的所有变量,比如cash、name、level等。现在我正试图用一个按钮将cash添加到我的cash JLabel中 JButton btnAddCash = new JButton("ADD 10,000"); btnAddCash.addActionListener(new ActionListener() { public void actionPerfor

所以我是Java新手,去年我在高中上了一节课,想尝试制作我自己的2d小游戏。我有一个stats.java,里面充满了我想要存储的所有变量,比如cash、name、level等。现在我正试图用一个按钮将cash添加到我的cash JLabel中

JButton btnAddCash = new JButton("ADD 10,000");
btnAddCash.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        stats.cash = (stats.cash + 5000);
    }
});

JLabel lblCash = new JLabel("Cash: " +stats.cash);
lblCash.setForeground(Color.WHITE);
lblCash.setBounds(10, 649, 162, 14);
contentPane.add(lblCash);
lblCash.setFont(new Font("AirbusMCDUa", Font.BOLD, 15));
JButton debugBtn = new JButton("");
任何帮助都会很棒

您的问题在(A)和(B)处

请理解,当您创建JLabel时,它持有现金字段的现值,而不持有对字段本身的引用。这一点很重要,因为更新现金字段不会影响JLabel的文本。您必须明确更改该文本:

btnAddCash.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        stats.cash = (stats.cash + 5000);    
        lblCash.setText("Cash: " +stats.cash);  // ****** update the text
    }
});
其他问题:

  • 再次强调,除非你有充分的理由使用它,否则要避免静电干扰
  • 查阅模型-视图-控制器设计模式并对其进行研究。这种类型的结构是您最终想要使用的
  • 避免绝对定位组件(空布局和
    setBounds
    ),因为这将导致沮丧、悲伤和糟糕的GUI。使用布局管理器
  • 考虑学习JavaFX而不是Swing,因为Oracle积极支持JavaFX,而Swing不支持JavaFX
    • 您的问题在(A)和(B)处

      请理解,当您创建JLabel时,它持有现金字段的现值,而不持有对字段本身的引用。这一点很重要,因为更新现金字段不会影响JLabel的文本。您必须明确更改该文本:

      btnAddCash.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              stats.cash = (stats.cash + 5000);    
              lblCash.setText("Cash: " +stats.cash);  // ****** update the text
          }
      });
      
      其他问题:

      • 再次强调,除非你有充分的理由使用它,否则要避免静电干扰
      • 查阅模型-视图-控制器设计模式并对其进行研究。这种类型的结构是您最终想要使用的
      • 避免绝对定位组件(空布局和
        setBounds
        ),因为这将导致沮丧、悲伤和糟糕的GUI。使用布局管理器
      • 考虑学习JavaFX而不是Swing,因为Oracle积极支持JavaFX,而Swing不支持JavaFX

      您只需更新JLabel

      JLabel lblCash = new JLabel("Cash: " + stats.cash);
      
      lblCash.setForeground(Color.WHITE);
      lblCash.setBounds(10, 649, 162, 14);
      lblCash.setFont(new Font("AirbusMCDUa", Font.BOLD, 15));
      contentPane.add(lblCash);
      
      JButton btnAddCash = new JButton("ADD 10,000");
      btnAddCash.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              stats.cash += 5000;                        // += is faster
              lblCash.setText("Cash: " + stats.cash);    // <-- Here
          }
      });
      contentPane.add(btnAddCash);                       // <-- Here
      
      JButton debugBtn = new JButton("");
      
      JLabel lblCash=新JLabel(“现金:+stats.Cash”);
      lblCash.设置前景(颜色:白色);
      lblCash.立根(1064916214);
      lblCash.setFont(新字体(“AirbusMCDUa”,Font.BOLD,15));
      contentPane.add(lblCash);
      JButton btnAddCash=新JButton(“添加10000”);
      addActionListener(新的ActionListener(){
      已执行的公共无效操作(操作事件e){
      stats.cash+=5000;//+=更快
      
      lblCash.setText(“Cash:+stats.Cash);//您只需更新JLabel

      JLabel lblCash = new JLabel("Cash: " + stats.cash);
      
      lblCash.setForeground(Color.WHITE);
      lblCash.setBounds(10, 649, 162, 14);
      lblCash.setFont(new Font("AirbusMCDUa", Font.BOLD, 15));
      contentPane.add(lblCash);
      
      JButton btnAddCash = new JButton("ADD 10,000");
      btnAddCash.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              stats.cash += 5000;                        // += is faster
              lblCash.setText("Cash: " + stats.cash);    // <-- Here
          }
      });
      contentPane.add(btnAddCash);                       // <-- Here
      
      JButton debugBtn = new JButton("");
      
      JLabel lblCash=新JLabel(“现金:+stats.Cash”);
      lblCash.设置前景(颜色:白色);
      lblCash.立根(1064916214);
      lblCash.setFont(新字体(“AirbusMCDUa”,Font.BOLD,15));
      contentPane.add(lblCash);
      JButton btnAddCash=新JButton(“添加10000”);
      addActionListener(新的ActionListener(){
      已执行的公共无效操作(操作事件e){
      stats.cash+=5000;//+=更快
      
      lblCash.setText(“现金:+stats.Cash”);//1.在没有充分理由的情况下,不要使用静态字段,我可以保证您现在使用它的理由不是很好。2.您发布了需求和一个小代码片段,看起来不足以让我们了解您的问题可能是什么。相反,您应该告诉问题的详细信息,并向h发布一个有效的请帮助我们更好地了解您的代码和问题。祝您好运。您的actionPerformed方法只更新字段,但不设置JLabel的文本——您需要显式执行此操作,因为JLabel不会神奇地更新自身。它不与stats.cash字段绑定,而是仅在创建时保留其值——这是您的main问题。非常感谢我删除了静态字段,并使其在每次单击时都设置文本,它似乎起作用了!1.如果没有充分的理由,不要使用静态字段,我可以保证您现在使用它的原因不是一个好的原因。2.您发布了要求和一个小代码段,看起来不足以给我们一个完整的解释了解您的问题可能是什么。相反,您应该告诉问题的详细信息,并发布有效的日志,以帮助我们更好地理解您的代码和您的问题。祝您好运。您的actionPerformed方法只更新字段,但不设置JLabel的文本——您需要显式执行此操作,因为JLabel不会神奇地自我更新。这是正确的不与stats.cash字段绑定,而是只在创建时保存它的值——这是您的主要问题。非常感谢您,我删除了Static并使其在每次单击时都设置文本,它似乎起作用了!