2010-10-13 84 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通過。