2011-06-16 24 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(); 
      } 
     }); 
    } 
}