Java NetBeans平台和StatusLineElementProvider
我正在使用NetBeans平台和Java开发一个应用程序。在应用程序的底部有一个StatusDisplayer,默认情况下它总是包括在内。在这个StatusDisplayer中,我添加了一个面板(StatusBarJPanel)。此StatusBarJPanel有两个图像图标,指示网络活动 我不知道如何隐藏(setVisible(false))在运行时没有活动时在该面板上创建的这些图标…如何更新StatusBarJPanel上的两个图标 以下是将my StatusBarJPanel添加到StatusDisplayer的代码: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
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。我想知道一旦应用程序已经运行,如何“发出信号”来显示/隐藏这些图标?我尝试过使用接口,但不知道如何使用。启动时,应用程序显示了面板,但我如何稍后更新该面板?还考虑了松耦合作为备选方案,非常感谢。