Java NetBeans平台和StatusLineElementProvider

Java NetBeans平台和StatusLineElementProvider,java,swing,netbeans-7,statusbar,netbeans-platform,Java,Swing,Netbeans 7,Statusbar,Netbeans Platform,我正在使用NetBeans平台和Java开发一个应用程序。在应用程序的底部有一个StatusDisplayer,默认情况下它总是包括在内。在这个StatusDisplayer中,我添加了一个面板(StatusBarJPanel)。此StatusBarJPanel有两个图像图标,指示网络活动 我不知道如何隐藏(setVisible(false))在运行时没有活动时在该面板上创建的这些图标…如何更新StatusBarJPanel上的两个图标 以下是将my StatusBarJPanel添加到Stat

我正在使用NetBeans平台和Java开发一个应用程序。在应用程序的底部有一个StatusDisplayer,默认情况下它总是包括在内。在这个StatusDisplayer中,我添加了一个面板(StatusBarJPanel)。此StatusBarJPanel有两个图像图标,指示网络活动

我不知道如何隐藏(setVisible(false))在运行时没有活动时在该面板上创建的这些图标…如何更新StatusBarJPanel上的两个图标

以下是将my 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;
    }
}

您不显示您的
状态栏jpanel
。大概它包含两个
JComponent
s,例如
JLabel
,每个组件都有一个
ImageIcon
。使用
setIcon(icon)
更改
图标
setIcon(null)
使图标消失应该很简单。所示示例可用于测试效果


另外,您可以在
@ServiceProvider
注释中指定
位置,如图所示。

如果我正确理解您的要求,您应该能够执行以下操作:

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
    }
}

collection感谢您的支持。我可能没有正确地解释我的问题。是的,我在StatusBarJPanel上有两个JLabel。我想知道一旦应用程序已经运行,如何“发出信号”来显示/隐藏这些图标?我尝试过使用接口,但不知道如何使用。启动时,应用程序显示了面板,但我如何稍后更新该面板?还考虑了松耦合作为备选方案,非常感谢。