Java 我可以使用ObjectChangeListener监听任何对象上的更改吗?
我有一个名为x的Java 我可以使用ObjectChangeListener监听任何对象上的更改吗?,java,swing,jndi,javabeans,Java,Swing,Jndi,Javabeans,我有一个名为x的整数;如果它改变了,那么我想在GUI中更新我的表。听“x”我试过了 ChangeEvent y = new javax.swing.event.ChangeEvent(x); 我实现了javax.naming.event.ObjectChangeListener: class HDIManagementView extends FrameView implements ObjectChangeListener, ActionListener, TableMo
整数
;如果它改变了,那么我想在GUI中更新我的表。听“x”我试过了
ChangeEvent y = new javax.swing.event.ChangeEvent(x);
我实现了javax.naming.event.ObjectChangeListener
:
class HDIManagementView extends FrameView
implements ObjectChangeListener, ActionListener, TableModelListener {
我重写objectChanged
方法来更新我的表。什么也没发生
public void objectChanged(javax.naming.event.NamingEvent name){
//gets which status
Object y=name.getChangeInfo();
String m=y.toString();
tableModel.setValueAt(y, 0, 0);
}`
如果我改变“x”,那么我的表中没有任何变化。我做错了什么
第二个问题是,x只能通过值来调用。我只能从数据库或属性文件访问x。当数据库发生变化时,即使侦听器侦听,x也无法理解它是否发生了变化。我所做的就是听y等于x。当x改变时,y不理解,因为x不是通过引用调用的。我能做什么?这个问题的答案是“不-你不能”和“JNDI和
javax。命名与你的问题无关”
我认为您可能混淆了Swing/JavaBeans侦听器框架与JNDI,Java命名和目录接口。ObjectChangeListener
仅用于侦听在JNDI上下文中绑定和重新绑定的对象。不能使用ObjectChangeListener侦听任意对象上的更改
为了做到这一点,您需要一个JNDI实现。为了监听更改,您需要监听EventContext
:
InitialContext ctx = new InitialContext();
EventContext ec = (EventContext) ctx.lookup("");
ec.addNamingListener("path/to/x", myListener)
如果您尝试此操作,它将失败,因为您尚未定义JNDI提供程序。通常由应用服务器供应商提供,例如IBM WebSphere或JBoss。应用服务器为应用程序提供JNDI,以查找数据源或配置信息等资源
为了让您做您真正想要做的事情,您需要实现一些类来包装整数并使用Java中的属性更改机制:
public class MyInteger {
private int x;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void setX(int i) {
int old = x;
x = i;
pcs.firePropertyChange("x", old, x);
}
public void addListener(PropertyChangeListener l) {
pcs.addListener("x", l);
}
}
然后,您的代码可以使用它:
MyInteger i = new MyInteger(9);
i.addListener(new PropertyChangeListener() {
public void propertyChanged(PropertyChangedEvent e) {
//implement to process the change - e.g. update your table
Integer i = (Integer) e.getNewValue();
}
});
这个问题的答案是“不-你不能”和“JNDI和
javax。命名与你的问题无关”
我认为您可能混淆了Swing/JavaBeans侦听器框架与JNDI,Java命名和目录接口。ObjectChangeListener
仅用于侦听在JNDI上下文中绑定和重新绑定的对象。不能使用ObjectChangeListener侦听任意对象上的更改
为了做到这一点,您需要一个JNDI实现。为了监听更改,您需要监听EventContext
:
InitialContext ctx = new InitialContext();
EventContext ec = (EventContext) ctx.lookup("");
ec.addNamingListener("path/to/x", myListener)
如果您尝试此操作,它将失败,因为您尚未定义JNDI提供程序。通常由应用服务器供应商提供,例如IBM WebSphere或JBoss。应用服务器为应用程序提供JNDI,以查找数据源或配置信息等资源
为了让您做您真正想要做的事情,您需要实现一些类来包装整数并使用Java中的属性更改机制:
public class MyInteger {
private int x;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void setX(int i) {
int old = x;
x = i;
pcs.firePropertyChange("x", old, x);
}
public void addListener(PropertyChangeListener l) {
pcs.addListener("x", l);
}
}
然后,您的代码可以使用它:
MyInteger i = new MyInteger(9);
i.addListener(new PropertyChangeListener() {
public void propertyChanged(PropertyChangedEvent e) {
//implement to process the change - e.g. update your table
Integer i = (Integer) e.getNewValue();
}
});
我想我也很困惑:)事实上,我不知道你在说什么。我只想看看一个整数是否改变了?所以我写了一些文章。也许我错了看到我更新的答案-你只是想要一个
PropertyChangeListener
我必须使用JNDI来理解整数的变化吗?不-忘记JNDI-这与你的问题无关我的计算机会告诉你一些关于你的代码的事情。上面写着“找不到符号PC”:)您可以修复它。谢谢。我想我也很困惑:)事实上,我不知道你在说什么。我只想看看一个整数是否改变了?所以我写了一些文章。也许我错了看到我更新的答案-你只是想要一个PropertyChangeListener
我必须使用JNDI来理解整数的变化吗?不-忘记JNDI-这与你的问题无关我的计算机会告诉你一些关于你的代码的事情。上面写着“找不到符号PC”:)您可以修复它。谢谢。我试试看