我想知道一种在创建桌面应用程序时使 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/