当其他类的变量发生变化时,如何更新JLabel文本



我有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_Flows存储在侦听器外部的变量中。炼金术也是如此。

最新更新