Есть ли способ в java swing показать всплывающую подсказку с различными сообщениями, на самом деле я работаю над приложением, в котором мне нужно обновить текущий статус приложения в подсказке на панели задач. Заранее спасибо.
Подсказка инструмента Java Swing с различными сообщениями
comment
используйте встроенный метод для отображения сообщения (содержится в моем последнем коде), и это значение вы также можете синхронизировать с ToolTip
- person mKorbel   schedule 04.10.2012
Ответы (3)
+1 Дэну и Гийому Полету. Просто используйте setToolTipText()
для компонента trayIcon
.
Я сделал для вас небольшой пример.
Он создаст TrayIcon
и добавит его к SystemTray
. Там после ToolTip
из TrayIcon
будут обновляться каждые 5 секунд:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class SystemTrayExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new SystemTrayExample().createAndAddTrayIcon();
}
});
}
private void createAndAddTrayIcon() {
try {
initComponents();
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
}
private void initComponents() throws MalformedURLException {
//Check the SystemTray is supported
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
final PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().createImage(new URL("http://docs.oracle.com/javase/tutorial/uiswing/examples/misc/TrayIconDemoProject/src/misc/images/bulb.gif")));
trayIcon.setToolTip("I am the initial message");
final SystemTray tray = SystemTray.getSystemTray();
// Create a pop-up menu components
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//Add components to pop-up menu
popup.add(exitItem);
//set popmenu
trayIcon.setPopupMenu(popup);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("TrayIcon could not be added.");
}
int delay = 5000; //milliseconds
final Timer timer = new Timer(delay, new ActionListener() {
int count = 1;
@Override
public void actionPerformed(ActionEvent evt) {
System.out.println("Updating on EDT " + (SwingUtilities.isEventDispatchThread() ? "Yes" : "No"));
if (count == 3) {
trayIcon.setToolTip("I am the last message");
((Timer) evt.getSource()).stop();//stop timer
}
if (count == 2) {//check if we should change tooltip
trayIcon.setToolTip("I am the second message");
}
if (count == 1) {
trayIcon.setToolTip("I am the first message");
}
count++;
}
});
timer.start();//start timer to change tooltip
}
}
person
David Kroukamp
schedule
04.10.2012
@GuillaumePolet спасибо, и это было просто дополнением к вашему совету и совету Дэна: P
- person David Kroukamp; 04.10.2012
Вы можете изменить всплывающую подсказку любого JComponent
во время выполнения, вызвав метод setToolTipText()
.
person
Dan D.
schedule
04.10.2012
Для TrayIcon
у вас есть метод trayIcon.setToolTip
. Вы можете вызвать его в любое время, и он сразу же обновится, даже после добавления значка в системный трей.
person
Guillaume Polet
schedule
04.10.2012
@sfshah Вызов этого метода из другого класса ничего не меняет. Вы имеете в виду, что звоните из другого потока, отличного от EDT? Если это так, вы всегда можете обернуть свой вызов в
SwingUtilities.invokeLater()
.
- person Guillaume Polet; 04.10.2012