我想给出一个视觉指示,表明节点已经转移到剪贴板,并带有"剪切"行动。至少一个专有操作系统使用的一种直观外观是使其成为相同的图像,但略微透明。
我很想知道是否有可能以某种方式使用Windoze操作系统(W7)使用的图标......但如果有可能干扰我,我会更感兴趣某种方式(在渲染器中)使用Icon,以某种方式搞乱Icon.paintIcon()所使用的Graphics对象......显然只是针对给定节点。我不清楚Icon在哪里寻找它在绘制时使用的Graphics对象...任何启示都是最受欢迎的。
后
非常感谢MadProgrammer。发现这种可能性是一种提取混淆视觉效果的方法,以便对其进行操作:https://home.java.net/node/674913 ......它有效。将代码放在这里以防链接断开......
public class IconTest {
public static void main(String[] args) {
Icon leafIcon = UIManager.getIcon("Tree.leafIcon");
// ... ("Tree.closedIcon") ("Tree.openIcon")
BufferedImage img1 = new BufferedImage(leafIcon.getIconWidth(),
leafIcon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = img1.createGraphics();
g.drawImage(((ImageIcon) leafIcon).getImage(), 0, 0, null);
g.dispose();
try {
ImageIO.write(img1, "PNG", new File("leafIcon.png"));
} catch (IOException e) {
System.out.println("Error writing to file leafIcon" + ", e = " + e);
System.exit(0);
}
}
}
然后使用MadProgrammer的技术以任何方式改变图像:改变透明度,颜色等。很棒的东西。
答案 0 :(得分:4)
我很想知道是否有可能以某种方式使用Windoze OS(W7)使用的图标
FileSystemView#getSystemIcon
会为您提供给定File
的操作系统图标表示,例如......
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File("ThatImportantDoc.docx"));
我想给出一个视觉指示,表明节点已经转移到剪贴板,并带有"剪切"行动。至少一个专有操作系统使用的一种直观外观是使其成为相同的图像,但略微透明。
您需要将之前的Icon
绘制为BufferedImage
,其中已应用AlphaComposite
,例如
BufferedImage img = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.setComposite(AlphaComposite.SrcOver.derive(0.5f));
icon.paintIcon(null, g2d, 0, 0);
g2d.dispose();
然后,您需要将生成的BufferedImage
包装在ImageIcon
中,这样您就可以将图像作为Icon
传递给API的其余部分。
JPanel panel = new JPanel();
panel.add(new JLabel(icon));
panel.add(new JLabel(new ImageIcon(img)));
JOptionPane.showMessageDialog(null, panel, "Icon", JOptionPane.PLAIN_MESSAGE);
为了使这一点最终发挥作用,您需要提供能够支持您的功能的TreeCellRenderer
。有关详细信息,请查看How to Use Trees
答案 1 :(得分:0)
只需一个调整就可以让我做我最想做的事情:从源代码中获取UI图像""。
public class IconTest {
public static void main(String[] args) {
// OS folder icon
// Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File("."));
// proprietary word processor
// Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File("Doc1.docx"));
// taken from PNG file
// Icon icon = new ImageIcon( "openIcon.png" );
// taken directly from the Java images held somewhere (?) in the code
Icon icon = UIManager.getIcon("Tree.leafIcon");
// Icon icon = UIManager.getIcon("Tree.openIcon");
// ... ("Tree.closedIcon") ("Tree.openIcon")
BufferedImage img = new BufferedImage( icon.getIconWidth(),
icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.setComposite(AlphaComposite.SrcOver.derive( 0.5f));
icon.paintIcon(null, g2d, 0, 0);
g2d.dispose();
JPanel panel = new JPanel();
panel.add(new JLabel(icon));
panel.add(new JLabel(new ImageIcon(img)));
JOptionPane.showMessageDialog(null, panel, "Icon", JOptionPane.PLAIN_MESSAGE);
}
}