2011-07-14 32 views
3

我有一個面板被一個動作改變了,它用一個具有不同最小尺寸的新面板替換掉它的子面板。我需要通知我的JSplitPane其中一個兒童面板已更改,因此我可以撥打updateToPreferedSize方法。有沒有事件已經被解僱了,我應該聽聽?如果不是,我該如何拋出一個父母可以捕獲的事件來通知它?如何報告面板更改爲父容器?

+0

什麼發起掉呢? – trashgod

回答

3

最簡單的方法是在面板上觸發一個自定義propertyChange事件,該事件將子對象交換出來,以便在它將子對象關閉後觸發該事件。即使世界在這裏一個很好的例子: http://download.oracle.com/javase/tutorial/javabeans/properties/bound.html

一旦你做到了這一點,調整JSplitPane可以註冊一個監聽器和這裏描述偵聽該屬性: http://download.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

概括起來,在面板互換孩子,你將需要初始化的PropertyChangeSupport:

private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); 

然後,當你換出的面板:

//All code to swap out the panel goes here 
this.pcs.firePropertyChange("childUpdated", false, true); 

而且在調整JSplitPane,你需要的東西是這樣的:

//...where initialization occurs: 
... 
amountField.addPropertyChangeListener("childUpdated", 
             new ChildUpdateListener()); 
... 
class ChildUpdateListener implements PropertyChangeListener { 
    public void propertyChanged(PropertyChangeEvent e) { 
     updateToPreferedSize(); 
    } 
} 
+0

有趣且很好的+1 – mKorbel

0

我不知道,而T3想這也應該工作:

panel.revalidate(); 
panel.repaint(); 
相關問題