2011-06-16 61 views
2

當我運行使用Netbean Swing創建的Java桌面應用程序時,JLabel圖標圖像立即加載,但我的JPanel上的背景圖像不會畫到屏幕上,直到我喚醒(重新調整)窗口。Swing Java桌面應用程序中沒有繪畫/加載的圖像

這裏是我的JPanel自定義代碼:

Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif")); 
javax.swing.JPanel panelBackground = new BackgroundPanel(image); 

有沒有更好的方法來調用的形象呢?有我應該實施的圖像處理代碼?

我該如何解決?

+0

寫道「有沒有更好的方式來調用圖像?」,我認爲,不是,該LayoutManagers問題http://download.oracle.com/javase/ tutorial/uiswing/layout/index.html和http://download.oracle.com/javase/tutorial/uiswing/components/label.html和http://download.oracle.com/javase/tutorial/uiswing/components/ icon.html很多關於http://www.java2s.com/Code/Java/Swing-JFC/CatalogSwing-JFC.htm – mKorbel 2011-06-16 23:03:39

+2

的示例如果使用ImageIO.read(...)來獲取圖像?此外,您是否在圖像顯示組件已被渲染後將其添加到GUI? – 2011-06-16 23:06:34

+0

@Hovercraft謝謝! ImageID.read(...)工作。 – Dorothy 2011-06-17 16:02:48

回答

0

Got it!

非常感謝氣墊船全鰻魚爲指針

「如果你使用ImageIO.read(...),讓您的圖像會發生嗎?還有,你把圖象在GUI呈現之後向GUI顯示組件?「

並以camickr的代碼去考慮這些。

我解決它使用:

Image imgBackground = ImageIO.read(getClass().getResourceAsStream("/images/background.gif")); 

創建,並在我的課的開始,而不是在JPanels自定義代碼段還曾分配圖像的變量。這是因爲圖像有更多的時間來創建..

2

適合我。我使用Background Panel進行了測試。如果您仍有問題,請發佈您的SSCCE

import java.awt.*; 
import javax.swing.*; 

public class BackgroundSSCCE extends JPanel 
{ 
    public BackgroundSSCCE() 
    { 
     setLayout(new BorderLayout()); 
     Image duke = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("dukeWaveRed.gif")); 
     BackgroundPanel test = new BackgroundPanel(duke, BackgroundPanel.ACTUAL, 1.0f, 0.5f); 
     add(test); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("BackgroundSSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new BackgroundSSCCE()); 
     frame.setSize(200, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
}