2012-07-12 82 views
3

我正在使用NetBeans平臺和Java開發應用程序。在應用程序的底部有一個StatusDisplayer,默認情況下總是包含它。對於這個StatusDisplayer我添加了一個面板(StatusBarJPanel)。這個StatusBarJPanel有兩個圖標圖標,表示網絡活動。NetBeans平臺和StatusLineElementProvider

我不知道如何隱藏(setVisible(false))這個面板上的這些圖標在運行時創建的時候沒有任何活動......如何更新StatusBarJPanel上的兩個圖標。

下面是我添加到StatusBarJPanel的StatusDisplayer代碼:

import java.awt.Component; 
import gui.StatusBarJPanel; 
import org.openide.awt.StatusLineElementProvider; 
import org.openide.util.lookup.ServiceProvider; 

@ServiceProvider(service = StatusLineElementProvider.class) 

public class StatusBar implements StatusLineElementProvider { 

    private StatusBarJPanel statusBarBottomJPanel = new StatusBarJPanel(); 

    @Override 
    public Component getStatusLineElement() { 
     return statusBarBottomJPanel; 
    } 
} 

回答

3

如果我正確理解你的要求,你應該能夠做到以下幾點:

Collection<? extends StatusLineElementProvider> all = 
    Lookup.getDefault().lookupAll(StatusLineElementProvider.class); 
for (StatusLineElementProvider a : all) { 
    if (a instanceof StatusBar) { 
     StatusBarJPanel ele = (StatusBarJPanel) ((StatusBar) a).getStatusLineElement(); 
     ele.doUpdate(); // or whatever method you need to call 
    } 
} 

使用這種技術將會給你用在啓動狀態行註冊了相同的StatusLineElementProvider秒。

+0

非常感謝你,這就是我一直在尋找的,它完美的作品! – jadrijan 2012-07-13 15:07:55

2

你不顯示您的StatusBarJPanel。推測它包含兩個JComponent,例如, JLabel,其中每個都有ImageIcon。使用setIcon(icon)更改IconsetIcon(null)以使圖標消失應該很簡單。示例herehere可用於測試效果。

另外,您可以在@ServiceProvider註釋中指定position,如here所示。

+0

感謝您的支持。我可能沒有正確解釋我的問題。是的,我在StatusBarJPanel上有兩個JLabel。我想知道如何「信號」顯示/隱藏這些圖標,一旦應用程序已經運行?我嘗試使用接口,但無法弄清楚如何。啓動時,應用程序會顯示面板,但以後如何更新此面板? – jadrijan 2012-07-13 13:03:44

+1

也可以考慮_loose coupling_作爲替代方法,在[這裏]提到(http://stackoverflow.com/a/11399506/230513)。 – trashgod 2012-07-13 17:37:42