[英]How to update JLabel text when varible from another class changes?
我有GUI class
,其中通过单击Pick_Flowers class
的JButton pick_flower
实例创建并通过单击Alchemy class
的JButton 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.