当前位置: 首页 > 面试题库 >

java TrayIcon使用具有透明背景的图像

谈秦斩
2023-03-14
问题内容

我正在使用以下代码在Windows和Linux中设置任务栏图标。它在Windows中效果很好,在Linux中效果很好。在Linux(Ubuntu)中,我将面板设置为(某种程度上)透明,并且当我添加GIF(具有透明背景)时,图标的背景显示为灰色和丑陋的所有颜色(参见图像,绿色菱形“!”)。
…有关如何制作GIF图片的任何想法,我要“保留”其透明背景?

替代文字http://unarm.org/stackoverflow/panel_task.jpg

以及我使用的图像(如果要测试):

替代文字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);
  }
}

问题答案:

此问题很可能无法解决。这取决于Java是否在Linux中创建托盘子窗口方面做得不错。如果Jave做错了,则绘制图像时透明度已经丢失。

  1. 您使用的图标的实际背景值是多少?上面显示的是灰色吗?将其设置为紫色,以查看是否使用了图像的透明度(Java默认为灰色背景)。

  2. 确保您尝试了PNG的两个透明度选项:透明颜色索引以及Alpha通道。Alpha通道在Linux中非常常见,而在Windows世界中则不是如此。

  3. 您的图标的分辨率太小。在64x64或更好的128x128中进行。AFAIK托盘图标没有标准分辨率,即使是,也肯定不是16x16。

  4. 您可以尝试使用的另一种格式是SVG。仅在确保图像的透明度是问题所在后再尝试操作(请参阅1)。

有关此问题的背景信息,请参见此处:http :
//www.rasterman.com/index.php?
page =News(向下滚动到2006年2月2日)



 类似资料:
  • 问题内容: 我将签名图像另存为.jpg图片。我使用graphic2d在图像上绘制签名的每个像素(使用签名板获得),它可以正常工作,但我总是得到白色背景。如果我想将签名放在PDF文档上,jpg图像的白色正方形的边框会覆盖PDF的某些单词。 我想要得到的是保存带有透明背景的jpg图像,因此当我将其放置在PDF上时,没有单词被白色图像背景覆盖,只有签名行。 这是保存缓冲图像的代码。它具有白色背景。 我试

  • 我正在尝试导出一个带有透明背景的matplotlib绘图,因为它是一个圆,我需要粘贴到另一个画布上(没有角)。 我遵循了这里的示例:如何使用透明背景从matplotlib导出绘图? 示例代码: 这里给出的示例是:如何使用Matplotlib设置图形背景颜色的不透明度 示例代码: 以及这里的例子:导出图在. png与透明背景 但这对我不起作用。当我粘贴到画布上时,我最终得到: 我需要它紧紧地围绕着油

  • 通过使用启用透明背景功能,可以使用自定义图片作为背景。 controller.setTransparentBackground( true );

  • 问题内容: 我想以 编程方式 删除ImageButton中的灰色背景。我尝试了多种删除方法,例如- 但是在实现它们时,我在触摸时不会在ImageButton上产生涟漪效果。(触摸时不突出显示)。 有什么方法可以消除背景但保留波纹效果或高光。 问题答案: 如果这个方法比我认为的有效,那么应该可以解决您的问题: http://codingdict.com/questions/141119

  • out.mov的ffprompt-show_stream-show_format的输出如下: 我有一个“示例”片段,它显示了我想要的行为,带有以下流和信息: 我根本无法看出其中的差别。 输入、输出和工作模板可以在这里找到。 (点击链接时,您可能会看到的安全问题来自服务器证书是自签名的。您可以接受临时异常。顺便说一句:输出文件荒谬的文件大小将是下一个需要解决的问题。可能是与压缩有关的问题。)

  • 我在这里绘制贝塞尔曲线,但我计划将图片保存为无背景的透明格式。根据我下面的绘图,我想让背景像没有背景的PNG图形一样透明。我只需要显示曲线和轴。我试着将其保存为PNG,但没有成功。可能吗?需要帮忙吗?