为什么我的透明图标没有呈现为透明?

时间:2015-05-19 19:49:50

标签: java image swing transparency imageicon

我使用以下代码行在Linux平台上更改IntelliJ中的JFrame图标:

myFrame.setIconImage(IMAGE_CIRCLE_ICON_RED.getImage());

显示图标,但它是透明图标,并且不显示为透明。如何将框架图标渲染为透明图标?

这是图标的链接。 IconRedCircleTransparent

enter image description here

2 个答案:

答案 0 :(得分:3)

enter image description here

似乎在这里工作得很好。运行以下源代码。如果您看到图片周围的透明度,请选择“是”'选项窗格中的选项,您可能会看到类似这样的内容作为标准输出流中的输出。

这是输出。

java.version:   1.7.0_25 
java.runtime.version:   1.7.0_25-b17 
java.vm.version:    23.25-b01 
java.specification.vendor:  Oracle Corporation 

OK? true

这是使用的代码。

import java.awt.BorderLayout;
import java.net.URL;
import javax.swing.*;

public class TransparentPNG_2 {

    private static String getPropertyString(String name) {
        String eol = System.getProperty("line.separator");
        String value = System.getProperty(name);
        return String.format("%1s: \t%2s%3s", name, value, eol);
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    JPanel ui = new JPanel(new BorderLayout());
                    URL url = new URL("http://i.stack.imgur.com/AnvwU.png");
                    ui.add(new JLabel(new ImageIcon(url)), BorderLayout.PAGE_START);

                    StringBuilder sb = new StringBuilder();
                    sb.append(getPropertyString("java.version"));
                    sb.append(getPropertyString("java.runtime.version"));
                    sb.append(getPropertyString("java.vm.version"));
                    sb.append(getPropertyString("java.specification.vendor"));
                    JTextArea output = new JTextArea(sb.toString().trim(), 4, 27);
                    ui.add(new JScrollPane(output));

                    int result = JOptionPane.showConfirmDialog(null, ui);
                    System.out.println(sb.toString());
                    System.out.println("OK? " + (result==JOptionPane.YES_OPTION));
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

答案 1 :(得分:3)

  

它看起来像一个被灰色方块包围的红色圆圈。我的画框是海蓝色的。

看起来非常像这个错误:[#JDK-6429220] Default LAF decorated frame does not support transparent icons - Java Bug System

enter image description here

import java.net.*;
import javax.swing.*;

public class TransparentIconTest {
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
      try {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        ImageIcon icon = new ImageIcon(
            new URL("http://i.stack.imgur.com/AnvwU.png"));
        f.setIconImage(icon.getImage());
        f.setSize(320, 240);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
      } catch (Exception ex) {
        ex.printStackTrace();
      }
  }
}