gpt4 book ai didi

Java - 监听变量变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:29 26 4
gpt4 key购买 nike

首先,我是 Java 的新手:/

我已经尝试自己解决这个问题大约 2 天了,但无法解决这个问题,问题是我正在尝试实现一个变量更改监听器。我曾尝试在我的项目中实现 Observer 和 Observable,但没有成功,但充其量也没有成功,我想出了将代码的一些元素包装到 while 循环中的方法,但失败了。

这是我的类(class),如果你看一下它,我在构造函数之后定义了一些全局变量,我需要监听所有这些全局变量的变化,如果有变化我想执行一个方法。

有人告诉我 JavaFX 有可以监听变量的方法,有人可以证实这一点吗?无论如何,提前感谢您的帮助。

public class Tower_Controller {

public Tower_Controller() {
}

//Global variables
String isSelected = null;
int hasModules = 0;
int cap_s = 0;
int cpu_s = 0;
int cap = 0;
int cpu = 0;
int shield = 0;
int armor = 0;
double em = 00.00;
double th = 00.00;
double ki = 00.00;
double ex = 00.00;


public void invoke() {
Invoke_GUI runnable = new Invoke_GUI();
final JLabel tower_name = runnable.tower_name;
final JComboBox tower_select = runnable.tower_select;
final JTree module_browser = runnable.module_browser;
final JTree selected_modules = runnable.selected_modules;

final JProgressBar cap_bar = runnable.cap_bar;
final JProgressBar cpu_bar = runnable.cpu_bar;

final JLabel em_res = runnable.em;
final JLabel th_res = runnable.thermic;
final JLabel ki_res = runnable.kinetic;
final JLabel ex_res = runnable.explosive;

tower_select.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if (isSelected != null) {
Events evt = new Events();
evt.towerSelected(isSelected);
} else {
tower_name.setText(tower_select.getSelectedItem().toString());
isSelected = tower_name.toString();
}
}
});

removeTower(tower_name);
runnable.setVisible(true);

}



public void updateValues(final JProgressBar cap_bar, final JProgressBar cpu_bar, final JLabel em_res,
final JLabel th_res, final JLabel ki_res, final JLabel ex_res){

cap_bar.setMaximum(cap);
cap_bar.setString(cap_s + " / " + cap);
cap_bar.setStringPainted(true);

cpu_bar.setMaximum(cpu);
cpu_bar.setString(cpu_s + " / " + cpu);
cpu_bar.setStringPainted(true);

String em_v = String.valueOf(em);
em_res.setText(em_v);

String th_v = String.valueOf(th);
th_res.setText(th_v);

String ki_v = String.valueOf(ki);
ki_res.setText(ki_v);

String ex_v = String.valueOf(ex);
ex_res.setText(ex_v);
}

public void updateList(final ArrayList<String> nodes, final JTree selected_modules) {
DefaultMutableTreeNode nod = new DefaultMutableTreeNode();
for (int i = 0; i < nodes.size(); i++) {
nod.add(new DefaultMutableTreeNode(nodes.get(i)));
}
selected_modules.setModel(new DefaultTreeModel(nod));
}

public void removeTower(final JLabel tower_name) {
tower_name.addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent e) {
if (hasModules == 1 & isSelected != null) {
Events evt = new Events();
evt.towerHasModules();
} else if (isSelected == null) {
} else {
tower_name.setText("No Control Tower selected");
isSelected = null;
}
}

@Override
public void mousePressed(MouseEvent e) {
}

@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}
});
}

public JLabel setTowerName(JLabel a, String name) {
a.setText(name);
return a;
}




}

最佳答案

通知变量更改的一般过程如下:

  1. 首先,将变量设为私有(private)。
  2. 为每个变量创建两个方法,一个将它的值设置为一个参数(通常称为 setX(),其中 X 是变量名),另一个检索它的值 (getX())
  3. 在任何需要读取或设置变量的地方,调用方法。
  4. setX() 方法中,循环调用 Observer 上的 notifyObserver()

好了!现在每次更改变量时,都会通知已注册的 Observer。该解决方案的关键部分是变量必须是私有(private)的,因此没有代码可以在不通过 setX() 方法的情况下设置它们的值。

关于Java - 监听变量变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com