3

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

我不知道如何在没有活动的情况下隐藏(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;
    }
}
4

2 回答 2

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提供与启动时在状态行中注册的相同的 s。

于 2012-07-13T14:25:15.570 回答
2

你不显示你的StatusBarJPanel. 大概它包含两个JComponents,例如JLabel,每个都有一个ImageIcon。它应该很容易setIcon(icon)用于更改IconsetIcon(null)使图标消失。此处此处显示的示例可用于测试效果。

顺便说一句,您可以position在注释中指定 ,如此@ServiceProvider所示。

于 2012-07-13T02:50:51.300 回答