繁体   English   中英

当另一个 class 的变量发生变化时,如何更新 JLabel 文本?

[英]How to update JLabel text when varible from another class changes?

我有GUI class ,其中通过单击Pick_Flowers classJButton pick_flower实例创建并通过单击Alchemy classJButton make_fuel实例创建。 我想单击一次按钮,然后文本将根据现在的值(鲜花总和或燃料总和)而改变。 例如,花 5 秒后总和将为 3(因此 JLabel 的文本将为“3”),10 秒后总和将为 6(因此 JLabel 的文本将为“6”)等等。但在我的 GUI 文本中JLabel 没有改变(鲜花总是“3”)。

public class GUI extends JFrame {

public static void main(String args[]) {
    GUI g = new GUI();
}

public GUI() {
    JFrame frame = new JFrame("Worker");
    JPanel panel = new JPanel();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setVisible(true);
    panel.setLayout(null);
    frame.add(panel);

    JLabel flower_count = new JLabel("0 flowers");
    panel.add(flower_count);
    Dimension flower_count_size = flower_count.getPreferredSize();
    flower_count.setBounds(800, 125, 200, flower_count_size.height);

    JLabel fuel_count = new JLabel("0 fuel");
    panel.add(fuel_count);
    Dimension fuel_count_size = fuel_count.getPreferredSize();
    fuel_count.setBounds(800, 275, 200, fuel_count_size.height);

    JButton pick_flower = new JButton("Pick flowers");
    panel.add(pick_flower);
    pick_flower.setBounds(600, 110, 130, 60);

    pick_flower.addActionListener(v -> {
        Pick_Flowers pick_flowers = new Pick_Flowers();
        flower_count.setText(android_helper.sum(pick_flowers.flowers)) + " flowers picked");

    });

    JButton make_fuel = new JButton("Extract fuel");
    panel.add(make_fuel);
    make_fuel.setBounds(600, 250, 160, 60);

    make_fuel.addActionListener(mi -> {
        Alchemy alchemy = new Alchemy();
        fuel_count.setText(android_helper.sum(alchemy.fuel_tanks) + " fuel extracted");
    });

    frame.setVisible(true);
}

     } 

这是Pick_Flower class

     import java.util.*;

     public class Pick_Flowers {

GirlsList girlsList = new GirlsList();
List<Integer> flowers = new ArrayList<>();
Android_Helper android_helper = new Android_Helper();

public static void main(String[] args) {

}

public Pick_Flowers(){
    Timer t = new Timer();
    t.schedule(new TimerTask() {
        @Override public void run() {
            flowerPicker();
        }
    }, 0, 5000);

}

public int flowerPicker() {
    int flower_picked = 1 * girlsList.flower_girls.size();
    flowers.add(flower_picked);
    System.out.println(android_helper.sum(flowers));
    return android_helper.sum(flowers);
}
      }

Alchemy class

import java.util.*;

public class Alchemy{

GirlsList girlsList = new GirlsList();
List<Integer> fuel_tanks = new ArrayList<>();
Pick_Flowers w = new Pick_Flowers();
Android_Helper android_helper = new Android_Helper();

public static void main(String[] args) {

}

public Alchemy(){
    Timer t = new Timer();
    t.schedule(new TimerTask() {
        @Override public void run() {
           alchemyFuel();
        }
    }, 0, 15000);
}

public int alchemyFuel(){
    int flower_sum = android_helper.sum(w.flowers);
    System.out.println(flower_sum);
    int fuel = (flower_sum / girlsList.flower_girls.size()) * girlsList.alchemy_girls.size();
    fuel_tanks.add(fuel);
    int now_flowers = flower_sum - fuel;
    w.flowers = new ArrayList<>();
    w.flowers.add(now_flowers);
    return android_helper.sum(fuel_tanks);
} 
    }

每次按下按钮时,您都会创建新的 Pick_Flowers,因此鲜花列表每次都是新的。 将 Pick_Flowers 存储在侦听器外部的变量中。 炼金术也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM