Guten Tag zusammen,
ist es mir möglich bei einem TrayIcon die Anzeigedauer einer Nachricht einzustellen? Ich habe das ganze mal so versucht zu lösen, aber dies ist noch nicht ganz das was ich haben wollte:
Dann habe ich noch eine Frage: Ist es auch möglich ein JPopup Menü mit hineinzubauen, oder bei einem Popup Menü Icons zu verwenden?
mfg. Dagobert
ist es mir möglich bei einem TrayIcon die Anzeigedauer einer Nachricht einzustellen? Ich habe das ganze mal so versucht zu lösen, aber dies ist noch nicht ganz das was ich haben wollte:
Java:
package GUI;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import Server.DatenbankServer;
import Server.LoginServer;
/**
* Diese Klasse stellt das TrayIcon Symbol für den Server da.
*
* @author Dagobert
* @version 1.0
* @since 06.12.2009
*/
public class ServerTrayIcon implements Runnable {
private DatenbankServer dbServer;
private LoginServer loginServer;
private TrayIcon trayIcon;
private Image trayImage;
private Queue<DisplayNachricht> messageQueue;
private boolean exitServer = false;
/**
* Erstellt ein neues ImageIcon, falls das System dies untersctüzt.
* @param dbServer
*/
public ServerTrayIcon(DatenbankServer dbServer) {
this.dbServer = dbServer;
if (SystemTray.isSupported()) {
messageQueue = new LinkedList<DisplayNachricht>();
SystemTray tray = SystemTray.getSystemTray();
try {
trayImage = ImageIO.read(new File("src/GUI/tray.png"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Das Trayiconmenü
PopupMenu menue = new PopupMenu();
// Server Start/Stop Menüpunkt
MenuItem startStop = new MenuItem("Stop Server");
menue.add(startStop);
// Einstellungen Menüpunkt
MenuItem einstellung = new MenuItem("Einstellungen");
new ServerKonfiguration(dbServer);
menue.add(einstellung);
// Beenden Menüpunkt
ImageIcon iconBeenden = new ImageIcon("src/GUI/tray2.png");
MenuItem exit = new MenuItem("Beenden");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
displayWarning("Beenden", "Der Server wird heruntergefahren", 5);
exitServer = true;
}
});
menue.add(exit);
trayIcon = new TrayIcon(trayImage, "Server", menue);
trayIcon.setImageAutoSize(true);
try {
tray.add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
}
} else {
System.out.println("Systemtray is not supported.");
}
}
/**
* Erstellt eine neue Display Nachricht vom Typ Message für das TrayIcon.
* @param titel Titel der Nachricht.
* @param message Eigentlichliche Nachricht.
* @param show Anzeigedauer der Nachricht.
*/
public void displayMessage(String titel, String message, int show) {
messageQueue.offer(new DisplayNachricht(titel, message, TrayIcon.MessageType.INFO, show));
}
/**
* Erstellt eine neue Display Nachricht vom Typ Warnung für das TrayIcon.
* @param titel Titel der Nachricht.
* @param message Eigentlichliche Nachricht.
* @param show Anzeigedauer der Nachricht.
*/
public void displayWarning(String titel, String message, int show) {
messageQueue.offer(new DisplayNachricht(titel, message, TrayIcon.MessageType.WARNING, show));
}
/**
* Erstellt eine neue Display Nachricht vom Typ Error für das TrayIcon.
* @param titel Titel der Nachricht.
* @param message Eigentlichliche Nachricht.
* @param show Anzeigedauer der Nachricht.
*/
public void displayError(String titel, String message, int show) {
messageQueue.offer(new DisplayNachricht(titel, message, TrayIcon.MessageType.ERROR, show));
}
/**
* Setzt ein neues Bild für das Icon.
* @param icon Das neue Bild.
*/
public void setTrayIcon(Image icon) {
trayIcon.setImage(icon);
}
/**
* Setzt ein neues Bild für das Icon.
* @param path Pfad zum Bild.
*/
public void setTrayIcon(String path){
try {
trayIcon.setImage(ImageIO.read(new File(path)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
while (!exitServer || (exitServer && !messageQueue.isEmpty())) {
if (!messageQueue.isEmpty()) {
DisplayNachricht message = messageQueue.poll();
trayIcon.displayMessage(message.getTitel(), message.getNachricht(), message.getTyp());
try {
Thread.sleep(message.getDauer()*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.exit(0);
}
public class DisplayNachricht {
private String nachricht;
private String titel;
private TrayIcon.MessageType typ;
private int anzeigedauer;
public DisplayNachricht(String titel, String message, TrayIcon.MessageType typ, int dauer) {
this.titel = titel;
this.nachricht = message;
this.typ = typ;
this.anzeigedauer = dauer;
}
public String getTitel() {
return this.titel;
}
public String getNachricht() {
return this.nachricht;
}
public TrayIcon.MessageType getTyp() {
return this.typ;
}
public int getDauer(){
return this.anzeigedauer;
}
}
public static void main(String[] arg) {
ServerTrayIcon icon = new ServerTrayIcon(null);
Thread t = new Thread(icon);
t.start();
for (int i = 0; i < 10; i++) {
icon.displayMessage("Test " + i, "Nachricht " + i , 5);
}
}
}
Dann habe ich noch eine Frage: Ist es auch möglich ein JPopup Menü mit hineinzubauen, oder bei einem Popup Menü Icons zu verwenden?
mfg. Dagobert