为什么我的透明图标没有呈现为透明?
Why is my transparent icon not getting rendered as transparent?
我使用以下代码行在 Linux 平台上更改了 IntelliJ 中的 JFrame
图标:
myFrame.setIconImage(IMAGE_CIRCLE_ICON_RED.getImage());
显示了图标,但它是透明图标,不显示为透明。如何让我的框架图标呈现为透明图标?
这是一个link的图标。
IconRedCircleTransparent
似乎在这里工作得很好。 运行下面的源代码。如果您在图像周围看到透明度,select 选项窗格中的 'Yes' 选项,您可能会在标准输出流中看到类似这样的输出。
这是这里的输出。
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);
}
}
It looks like a red circle surrounded by a grey square. My frame is ocean blue.
看起来很像这个错误:[#JDK-6429220] Default LAF decorated frame does not support transparent icons - Java Bug System
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();
}
}
}
我使用以下代码行在 Linux 平台上更改了 IntelliJ 中的 JFrame
图标:
myFrame.setIconImage(IMAGE_CIRCLE_ICON_RED.getImage());
显示了图标,但它是透明图标,不显示为透明。如何让我的框架图标呈现为透明图标?
这是一个link的图标。 IconRedCircleTransparent
似乎在这里工作得很好。 运行下面的源代码。如果您在图像周围看到透明度,select 选项窗格中的 'Yes' 选项,您可能会在标准输出流中看到类似这样的输出。
这是这里的输出。
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);
}
}
It looks like a red circle surrounded by a grey square. My frame is ocean blue.
看起来很像这个错误:[#JDK-6429220] Default LAF decorated frame does not support transparent icons - Java Bug System
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();
}
}
}