2009-11-24 188 views
3

我正在尝试使用Java AWT FileDialog,但我想用别的东西替换默认的Java对话框图标。总之,代码看起来是这样的:为什么Java AWT FileDialog的setIconImage方法无法设置图标?

Frame frame = new Frame(); 
Image image = ImageIO.read(new URL("file:/path/to/myfile.jpg")); 
FileDialog fileDialog = new FileDialog(frame, "Save As", FileDialog.SAVE); 

fileDialog.setIconImage(image); 
fileDialog.setDirectory("/path/to/directory"); 
fileDialog.setFile("filename.txt"); 

fileDialog.setVisible(true); 

我试过几个变化,包括读取图像,装箱的FileDialog,包装框架不同的方法,设置了框的图标等。但是,无论我尝试什么,FileDialog图标都不会更改。当我设置框架的图标并将框架设置为可见时,框架显示了正确的图标,但对于FileDialog仍然是不可行的。

有什么想法?

+0

使用JFileChooser并在其父JFrame上设置图标,或创建子类并覆盖createDialog()。这里建议的解决方案: http://stackoverflow.com/questions/6994772/how-to-change-default-java-icon-in-jfilechooser – xorcus 2015-01-26 22:11:01

回答

1

这可能不适用于所有平台。我猜FileDialog以某种方式使用操作系统提供的filedialog,如果这不支持图标,你运气不好。

+0

我认为你的评论肯定是在正确的轨道上。我刚刚检查并且Windows中的FileDialogs不会默认使用图标。为什么在这个世界上他们默认使用Solaris中的Java图标超出了我的想象(而且非常令人沮丧)。感谢您的输入! – Adam 2009-11-24 17:38:00

2

作为AWT组件的FileDialog将更多地绑定到本地平台。在Solaris情况下,它可能会从启动应用程序本身的java可执行文件中获取图标。

有没有理由不能使用JFileChooser?

+0

该应用程序实际上是作为Rich Client Platform应用程序在SWT中编写的。不幸的是,SWT文件对话框对底层文件系统提供了太多不可定制的访问权限(用户应该能够完成的所有操作都是保存/打开文件 - 我们无法为他们提供删除文件和目录的能力)。这使我们可以选择在SWT中创建我们自己的文件对话框或使用AWT文件对话框。如果我们使用JFileChooser,我们会失去原生的外观和感觉。这是一个令人讨厌的悖论,但它就是这样。 – Adam 2009-11-30 15:40:55

相关问题