java - 使用 Netbeans 桌面应用程序状态栏

标签 java netbeans desktop-application statusbar

我想知道一种在创建桌面应用程序时使 netbeans 提供的状态栏真正起作用的方法,但我真的不明白该怎么做。

我在下面包含了代码,以便每个人都能理解我的意思以及在 netbeans 中的何处可以找到它。

    // status bar initialization - message timeout, idle icon and busy animation, etc
    ResourceMap resourceMap = getResourceMap();
    int messageTimeout = resourceMap.getInteger(
            "StatusBar.messageTimeout");
    messageTimer = new Timer(messageTimeout,
            new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent e)
        {
            statusMessageLabel.setText("");
        }
    });
    messageTimer.setRepeats(false);
    int busyAnimationRate = resourceMap.getInteger(
            "StatusBar.busyAnimationRate");
    for (int i = 0; i < busyIcons.length; i++)
    {
        busyIcons[i] = resourceMap.getIcon(
                "StatusBar.busyIcons[" + i + "]");
    }
    busyIconTimer = new Timer(busyAnimationRate,
            new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent e)
        {
            busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
            statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
        }
    });
    idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
    statusAnimationLabel.setIcon(idleIcon);
    progressBar.setVisible(false);

    // connecting action tasks to status bar via TaskMonitor
    TaskMonitor taskMonitor = new TaskMonitor(
            getApplication().getContext());
    taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener()
    {

        @Override
        public void propertyChange(
                java.beans.PropertyChangeEvent evt)
        {
            String propertyName = evt.getPropertyName();
            if ("started".equals(propertyName))
            {
                if (!busyIconTimer.isRunning())
                {
                    statusAnimationLabel.setIcon(busyIcons[0]);
                    busyIconIndex = 0;
                    busyIconTimer.start();
                }
                progressBar.setVisible(true);
                progressBar.setIndeterminate(true);
            } else if ("done".equals(propertyName))
            {
                busyIconTimer.stop();
                statusAnimationLabel.setIcon(idleIcon);
                progressBar.setVisible(false);
                progressBar.setValue(0);
            } else if ("message".equals(propertyName))
            {
                String text = (String) (evt.getNewValue());
                statusMessageLabel.setText(
                        (text == null) ? "" : text);
                messageTimer.restart();
            } else if ("progress".equals(propertyName))
            {
                int value = (Integer) (evt.getNewValue());
                progressBar.setVisible(true);
                progressBar.setIndeterminate(false);
                progressBar.setValue(value);
            }
        }
    });

我知道 ir 可能与 TaskMonitor 有关,但我无法理解。 :(

最佳答案

如果您只想更新状态栏中的文本,请使用:

StatusDisplayer.getDefault().setStatusText("Hello World!");

如果您想使用自定义组件(如您的示例),您需要创建一个新类。它会自动注册:

@ServiceProvider(service=StatusLineElementProvider.class, position=18)
public class TestStatusLineElementProvider implements StatusLineElementProvider {
    private JLabel statusMessageLabel = new JLabel("Hello World!");

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

关于java - 使用 Netbeans 桌面应用程序状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121655/

相关文章:

python - 如何使用Python和HTML构建桌面软件?

java - 正确的 cookie 管理

java - 为什么 PHP 不允许将类变量指定为对象?

jsf - 使用 Netbeans 指定调试源

database - Netbeans-Apache Derby : How to export to XML?

objective-c - 刷新mac os x的桌面图标

java - 如何将纬度和经度拆分为单独的字符串?

java - 实例化一个使用 protected 访问说明符继承的内部类

c - NetBeans 导航器窗口为空

java - 使用 Inno setup 在启动文件夹中创建快捷方式