2009-08-28 41 views
1

我有一個Integer叫做x;如果它改變,那麼我想在GUI中更新我的表格。要收聽 「X」 我已經嘗試了我可以使用ObjectChangeListener偵聽任何對象上的更改嗎?

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變化不明白時,因爲x不是由參考調用。我能做什麼?

回答

8

的問題的答案是「不 - 你不能」「JNDI和javax.naming是無關你的問題」

我想你可能混淆了Swing/JavaBeans的監聽器框架與JNDI,Java命名和目錄接口。 ObjectChangeListener僅用於偵聽在JNDI上下文中綁定和重新綁定的對象。 不能任意對象

InitialContext ctx = new InitialContext(); 
ctx.rebind("path/to/x", new Integer(4)); 

上使用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(); 
    } 
}); 
+0

我想我也很困惑:)其實,我不知道你在說什麼。我想要的只是查看Integer是否改變了?所以我寫了一篇文章和http://www.j2ee.me/j2se/1.3/docs/api/javax/swing/event/ChangeEvent.html。也許我錯了 – Iguramu 2009-08-28 12:41:47

+0

看到我更新的答案 - 你只是想'PropertyChangeListener' – 2009-08-28 12:45:52

+0

我是否必須使用JNDI來了解整數更改? – Iguramu 2009-08-28 12:45:57

相關問題