2011-09-25 72 views
1

顯示我有這樣的代碼:ImageIcon的犯規上左上角的應用程序窗口

public DesktopApplication1View(SingleFrameApplication app) 
    { 
     super(app); 
     pbu.registriere(this); 

     ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png"); 
     this.getFrame().setIconImage(icon.getImage()); 

     initComponents(); 

我想知道爲什麼圖像圖標犯規出現在應用程序窗口的左上角。它仍然是Java杯咖啡標誌。

有什麼不對嗎?

謝謝

+1

is icon.getImageLoadStatus()== MediaTracker.COMPLETE –

+0

我該如何檢查? – hectichavana

+0

你的問題可能是重複的:http://stackoverflow.com/questions/7194734/setting-application-icon-in-swing –

回答

2

一個可能的可能性是您的資源路徑可能不正確。根據您的文件層次結構以及您的類文件是否在jar中等,您可能需要在res之前的路徑開始處使用「/」,以使路徑變爲絕對路徑而不是相對路徑。教程:http://download.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

如果您確信自己正在正確讀取圖像(一個好的測試是在窗口內製作一個虛擬組件,並查看是否可以將圖像加載到該窗口中),則應查看以下內容Frame/Top Level Window Tutorial,特別是關於窗飾的部分。特別是,你可能沒有做的一件事(我無法從你的片段中看出來)是,看起來你可能需要在框架創建之前設置JFrame.setDefaultLookAndFeelDecorated(true); ......你無法使用this.getFrame()來做,但是需要在初始化代碼中的某處執行。

+0

一切似乎都正確,包括資源路徑,因爲在另一個盒子上,我在同一文件夾(資源)上設置圖像,並使用相同的文字 – hectichavana

+0

您是否在區分大小寫的操作系統上?我注意到你的圖像文件名中有大寫字母。 –

+0

JFrame frame = new JFrame(「FrameDemo」); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel emptyLabel = new JLabel(「」); emptyLabel.setPreferredSize(new Dimension(175,100)); frame.getContentPane()。add(emptyLabel,BorderLayout。中央); frame.setIconImage(new ImageIcon(「/ resources/BilKa_Icon_32.png」)。getImage()); 我把這些放在課堂上,但是新窗口彈出來了,但新窗口的圖標也沒有改變。 – hectichavana

2

Mike K是對的,ImageIcons可以動態加載,並且圖像在第一次初始化時可以具有零大小。另請注意,在Unix和JAR中,名稱區分大小寫。

試試這個:

try{ 
    ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png"); 
    MediaTracker mt=new MediaTracker(this); 
    mt.addImage(icon.getImage(),0); 
    mt.waitForAll(); 
    this.getFrame().setIconImage(icon.getImage()); 
}catch(InterruptedException excp){} 

-

OK道歉我已經編輯了addImage - 它需要它可以是任何數量的額外參數ID。 至於你的錯誤「沒有這樣的構造函數」,它告訴你,你需要傳遞一個Component給構造函數。你的應用程序窗口是一個組件,所以你應該把它作爲參數傳遞給它。我使用了this,因爲大多數人將此代碼放在class內部,該代碼擴展爲Frame,WindowJFrame。所以使用

MediaTracker mt=new MediaTracker(this.getFrame()); 
+0

我得到這個錯誤:構造函數MediaTracker(DesktopApplication1View)是未定義的。我還需要一個mt.addImage的參數 – hectichavana