2014-09-10 94 views
2

我正在处理一个任务(GASP)并且遇到了图像显示问题。我不想找人为我完成我的任务,但我迫切需要一些帮助,弄清楚为什么我的代码无法正常工作。我回顾了我的Java编程书以及在线搜索的答案无济于事,所以如果有人能带领我朝着正确的方向,我将不胜感激! 这里是我的displayImage代码:如何将图像导入到JPanel

import java.awt.Graphics; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class DisplayImage extends JFrame { 
public void DislayImage(){ 
    add (new ImagePanel()); 
} 

public static void main(String[] args) { 
    JFrame frame = new DisplayImage(); 
    frame.setTitle("Go Bearcats!"); 
    frame.setSize(300, 300); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    Assignment02 a = new Assignment02(); 
    frame.add(a); 

} 
} 
class ImagePanel extends JPanel { 
    public final static String LOC = "C:\\UCincinnatiLogo.jpg"; 
    private ImageIcon imageIcon = new ImageIcon (LOC); 
    private Image image = imageIcon.getImage(); 

    @Override /**Draw image on the panel*/ 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 

     if (image !=null) 
      g.drawImage(image, 200, 200, getWidth(), getHeight(), this); 
    } 

} 
+0

在将面板添加到框架后调用setVisible。另外,什么不工作? – MadProgrammer 2014-09-10 21:40:07

+0

使用JLabel(使用JLabel)会更容易,将图标分配给它并将标签放置在具有图像大小的面板上。 – Tom 2014-09-10 21:40:26

+0

你为什么说你的代码工作不正常? – 2014-09-10 21:40:57

回答

4

你将你的图像面板顶部的部分权利。 JFrame使用borderLayout,所以任何添加到它的东西都会覆盖之前添加的任何东西。

JFrame frame = new DisplayImage(); 
frame.setTitle("Go Bearcats!"); 
frame.setSize(300, 300); 
frame.setLocationRelativeTo(null); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 
Assignment02 a = new Assignment02(); 
frame.add(a); // here you add something on top of your imagePanel 

相反,通过setContentPane(...)使ImagePanel Jframe的contentPane中,然后添加的东西到JFrame/contentPane的,但可以肯定,他们是不是不透明。

public class DisplayImage extends JFrame { 
public void DislayImage(){ 
    setContentPane(new ImagePanel()); 
} 

然后,

Assignment02 a = new Assignment02(); 
a.setOpaque(false); 
frame.add(a); 

注意,顺便说一句,我很少创建扩展JFrame的任何类,而是在需要时创建我的JFrame。相反,我会创建我的ImagePane,然后在将所有内容添加到JFrame之前直接添加组件。


此外,您不向我们展示Assignment02类,但它最好有不透明的JPanel和组件。