2010-10-13 42 views
1

我试图在JOption窗格的标题中使用客户图标,而不是使用标签。有没有办法可以做到这一点?我在JOptionPane中使用了图标类(如下所示),但它一直在主显示区而不是标题中显示图标。 下面是代码:在JOptionPane.showInputDialog中使用标题中的自定义图标

Icon icon = new ImageIcon(ApplicationManager.getApplicationImage().getImage()); 
String jid = (String)JOptionPane.showInputDialog(ApplicationManager.getMainWindow(), 
       Res.getString("label.enter.address"), 
       Res.getString("title.start.chat"), 
       JOptionPane.QUESTION_MESSAGE, 
       icon,      
       null, 
       selectedUser); 

感谢

回答

1

还没有尝试过,但你可能会得到它的一个内部框架的工作,而不是使用一个对话框。尝试创建JOptionPane的实例并致电getInternalFrame()。 JInternalFrame有一个setFrameIcon(Icon icon)方法。

编辑:当然JInteralFrame的父母必须是JDesktopPane,但除此之外它应该工作。

+0

这不会工作,因为我有一些预先选定的值,我需要填充输入对话框,因此不能使用JOptionPane构造函数,而是必须使用showInputDialog方法.. 谢谢。 – 2010-10-19 14:42:27

3

试试这个代码..

import javax.swing.JOptionPane; 
import javax.swing.JDialog; 
import javax.imageio.ImageIO; 
import java.awt.Image; 
import java.net.URL; 

class OptionPaneIcon { 

    public static void main(String[] args) throws Exception { 
     JOptionPane jop = new JOptionPane(
      "Message", 
      JOptionPane.QUESTION_MESSAGE, 
      JOptionPane.DEFAULT_OPTION 
      ); 

     JDialog dialog = jop.createDialog("Dialog Title"); 

     Image image = ImageIO.read(new URL(
      "http://www.gravatar.com/avatar/f1d58f7932b6ae8027c4e1d84f440ffe?s=128&d=identicon&r=PG")); 
     dialog.setIconImage(image); 
     dialog.setVisible(true); 
    } 
} 
+0

优秀的http://sscce.org/;可悲的是,一些L&F(例如Mac OS)忽略了这个设置。 – trashgod 2010-10-13 20:56:47

+0

我只在Windows上测试过它。不知道它是否适用于Linux。 – 2010-10-14 04:06:52

0

HI,

,因为我有一些预先选定的价值,我需要填充输入对话框,因此不能使用的JOptionPane的构造这是行不通的而是必须使用showInputDialog方法..

因此,我相信使用showInputDialog当我不能使用的是定制的图标(。,。,。,。,。,。,。)

谢谢。

1

JOptionPane从父框架中获取其图标。所以,你可以设置一个虚拟的JFrame的图标,并传递到JOptionPane的呼叫:

BufferedImage image = ImageIO.read(new URL(
    "http://www.gravatar.com/avatar/f1d58f7932b6ae8027c4e1d84f440ffe?s=128&d=identicon&r=PG")); 
    JFrame frame = new JFrame(); 
    frame.setIconImage(image); 
    JOptionPane.showInputDialog(frame, "Enter Address", "Chat", 
      JOptionPane.QUESTION_MESSAGE, null, null, ""); 

注意,这可能会导致问题与所示对话框的位置,因为它会相对放置的假人JFrame通过。