求教,为什么我这窗体的图片显示不出来,窗体大小也不按参数变

。。我想让窗体上面显示一张类似网页里logo的图片。。下面是一个文本框和一个用来打开文件的按钮,那个actionPerformed函数是用来获取文件路径的,重点是那个窗体的大小我设置了400*400但实际大小没有变化,而那张放在北边的图片也显示不出来,请指教,代码如下:

package ft;

import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyTest extends JFrame implements ActionListener{
JButton jbtn = null;
JTextField jtf = null;
JPanel bp1 = new JPanel();
JPanel bp2 = new JPanel();

public MyTest(){
    this.setLayout(new FlowLayout());
    jbtn = new JButton("打开..");
    jbtn.addActionListener(this);
    jtf = new JTextField(30);

    ImageP p = new ImageP();
    bp2.add(p);

    bp1.add(jtf);
    bp1.add(jbtn);

    this.add(bp1,BorderLayout.SOUTH);
    this.add(bp2,BorderLayout.NORTH);


    this.setSize(400,400);
    this.setVisible(true);
    this.pack();
}
public void actionPerformed(ActionEvent e) {
    if(e.getSource().equals(jbtn)){

        int response = 1;
        do{

            FileDialog fd = new FileDialog(this);
            fd.setVisible(true);


            String a = fd.getDirectory()+fd.getFile();
            System.out.println(a);
            this.setVisible(false);
            Object[] options = {"是,我要继续生成新XML","否,我想退出程序"};
            response=JOptionPane.showOptionDialog(this, "XML已生成,是否继续生成新XML?", "亿阳报表自动化系统",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);


            if(response == 1)
            { 
                System.exit(0);
            }

        }while(response == 0);      

    }
}
public static void main(String[] args){



    new MyTest();

}

}

class ImageP extends JPanel{

JPanel bp2 = new JPanel();
private Image image;


public ImageP(){
    try{
        image = ImageIO.read(new File("E:\\未命名2.JPG"));
    }catch(IOException e){
        e.printStackTrace();
    }
    if(image == null){
        System.out.println("222");
    }else{
        System.out.println("333");
    }

}

public void ImageP2(Graphics g){
    super.printComponents(g);
    g.drawImage(image,0,0,null);
}

}

初看了下LZ的代码,可能有几个问题(时间长了不确定),请LZ检查

  1. [code="java"] this.setSize(400,400); this.setVisible(true); [color=red]this.pack(); [/color] [/code]

这里的this.pack(); 貌似有把窗口放到合适大小的意思.这应该是LZ窗口没有按预期显示大小的原因.是不是有个show方法的.

2.[code="java"]
class ImageP extends JPanel{

JPanel bp2 = new JPanel();
private Image image;

public ImageP(){
try{
image = ImageIO.read(new File("E:\未命名2.JPG"));
}catch(IOException e){
e.printStackTrace();
}
if(image == null){
System.out.println("222");
}else{
System.out.println("333");
}

}

public void ImageP2(Graphics g){
super.printComponents(g);
g.drawImage(image,0,0,null);
}
}
[/code]
这个类的问题在于,你新建的Image压根就没有放到JPanel上面去.应该以某种方式设置到面板上面去才是.LZ可能想draw上去,可能不行的吧.把它放到JLabel里面设置到JPanel里面去试试看.

以上是我的看法,LZ请检查.(PS:不一定都对哦. :wink:)