Java TrayIcon verwendet Bild mit transparentem Hintergrund
Ich bin mit dem folgenden code, um ein tray-icon in Windows und Linux. Es funktioniert wunderbar in Windows und einwandfrei unter Linux. In Linux (Ubuntu) ich habe mein panel eingestellt werden (etwas) transparenter, und wenn ich ein GIF (mit transparentem hintergrund) der hintergrund des symbols zeigt sich alles Grau und hässlich (siehe Bild, grüne Diamant "!")....Irgendwelche Ideen auf, wie man das GIF-Bild, ich bin das hinzufügen von "halten" Ihrer transparenten hintergrund?
alt-text http://unarm.org/stackoverflow/panel_task.jpg
und das Bild, das ich benutze, wenn Sie möchten, um zu testen:
alt-text http://unarm.org/stackoverflow/green_info.gif
import java.awt.*;
import java.awt.event.*;
public class TrayFun {
static class ShowMessageListener implements ActionListener {
TrayIcon trayIcon;
String title;
String message;
TrayIcon.MessageType messageType;
ShowMessageListener(
TrayIcon trayIcon,
String title,
String message,
TrayIcon.MessageType messageType) {
this.trayIcon = trayIcon;
this.title = title;
this.message = message;
this.messageType = messageType;
}
public void actionPerformed(ActionEvent e) {
trayIcon.displayMessage(title, message, messageType);
}
}
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
if (SystemTray.isSupported()) {
final SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("green_info.png");
PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(image, "The Tip Text", popup);
trayIcon.setImageAutoSize(true);
MenuItem item = new MenuItem("Close");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tray.remove(trayIcon);
}
});
popup.add(item);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("Can't add to tray");
}
} else {
System.err.println("Tray unavailable");
}
}
};
EventQueue.invokeLater(runner);
}
}
InformationsquelleAutor der Frage Jack | 2008-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Chancen sind, wird dieses problem nicht gelöst werden. Es hängt davon ab, ob Java macht einen guten job bei der Schaffung der tray-Fenster in Linux oder nicht. Wenn Jave Fehler gemacht, die Transparenz ist bereits verloren, wenn das Bild gezeichnet wird.
Was ist der wahre hintergrund Wert des symbols, das Sie verwenden? Ist es der graue Ton oben gezeigt? Legen Sie es auf lila um zu sehen, ob die Transparenz des Bildes verwendet wird (Java ist standardmäßig Grau hinterlegt) oder nicht.
Stellen Sie sicher, dass Sie versucht, sowohl die Transparenz-Optionen des PNG: transparent color index als auch als alpha-Kanal. Alpha-Kanal ist sehr Häufig in Linux nicht so in der Windows-Welt.
Die Auflösung des icon ist zu klein. Tun Sie es in 64x64 oder besser 128x128. AFAIK gibt es keine standard-Auflösung für die Symbole in der Taskleiste, und selbst wenn dem so ist, ist es sicherlich nicht 16x16.
Einem anderen format, das Sie könnten versuchen, ist SVG. Versuchen Sie nur, nachdem Sie sicher, dass die Transparenz des Bildes ist das problem (siehe 1).
Hier finden Sie hintergrund-Informationen zu diesem Thema:
http://www.rasterman.com/index.php?page=News (nach unten scrollen bis 2. Februar 2006)
InformationsquelleAutor der Antwort ypnos
Das problem liegt in der Sonne.das awt.X11.XTrayIconPeer.IconCanvas.paint () - Methode!
Vor dem Lackieren, das Symbol hintergrund ist amateurishly deaktiviert, indem Sie einfach ein Rechteck aufziehen von IconCanvas' Hintergrundfarbe, damit Bild-Animationen.
finden Sie unter: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6453521
InformationsquelleAutor der Antwort Falkster
Für diejenigen, die für eine "echte" Lösung, die ich entwickelt habe, eine kleine Bibliothek, die fähig ist, die Anzeige des tray-icon zu Ehren der Transparenz und akzeptiert auch SVG-icons (für alle Plattformen):
http://skype2gmail.blogspot.com/2011/05/java-tray-icon-transparency.html
Es ist ein open-source-Bibliothek und der Quellcode kann hier gefunden werden:
https://github.com/taksan/native-tray-adapter
Die Bibliothek work around the problem, indem Sie eine JNI-alternativen (mit GTK), bei der Ausführung unter linux.
InformationsquelleAutor der Antwort taksan
JDIC hat ein tray-icon, Sie könnte die Unterstützung der Transparenz in linux...
https://jdic.dev.java.net/
InformationsquelleAutor der Antwort Somatik
Haben Sie versucht, die Konvertierung in ein .PNG (mit Transparenz) statt? Ich habe festgestellt, Sie neigen dazu, besser unterstützt werden, die von Java (In meiner Erfahrung)
InformationsquelleAutor der Antwort Richard Walton
nicht . . . dies ist geschehen, weil es mit dem Standard-GNOME-theme für die Darstellung der Transparenz - es hat nichts zu tun mit dem Bild, das Sie selbst - dies ist eine adobe air /gnome-Konflikt - wenn Sie wechseln Sie zu einer gnome-Thema waren die Standard-hintergrund ist Grau, dann wäre es Grau statt weiß. Es wird die Standard-Bild so auch wenn es eingestellt wurde, aber das Thema für das Gremium zu haben, ein BG-image, um es so Aussehen glänzend wie vista zum Beispiel, als Sie es tun würden. Adobe Air /Java nicht wissen, dass Sie über Weg das Standard-theme mit Transparenz und deshalb ist es auch mit den Standard-system -
InformationsquelleAutor der Antwort freshfitteds