package zgd;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.filechooser.FileNameExtensionFilter;public class Bar extends JFrame implements ActionListener{
JScrollPane jsp;
JButton jb;

PainImage pi2;
File dirPath;
JFileChooser chooser;

public Bar(String name){
super(name);

jb=new JButton("打开");
jb.addActionListener(this);

this.setLayout(new BorderLayout());

this.add(jb,BorderLayout.NORTH);
this.setSize(300,400);
   this.setVisible(true);

} @Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String type=arg0.getActionCommand();
if(type=="打开"){
if(dirPath==null){
chooser=new JFileChooser();
}else
 chooser=new JFileChooser(dirPath);
  chooser.setDialogTitle("Open JPEG file");
  
  //用来对文件的类型的限定
  FileNameExtensionFilter filter = new FileNameExtensionFilter("jpg&png", "jpg","png");
  chooser.setFileFilter(filter);
  
  int result = chooser.showOpenDialog(this);  //依附于   mainframecon  存在的
  
  if (result == JFileChooser.APPROVE_OPTION) {
  
  
  dirPath=chooser.getCurrentDirectory();//设定当前打开目录
  chooser.setCurrentDirectory(dirPath);
  
//  System.out.print(dirPath.getPath());
  
  String filePath=chooser.getSelectedFile().getPath();//得到所选文件的路径   
  pi2=new PainImage(new ImageIcon(filePath).getImage());
  pi2.setPreferredSize(new Dimension(1400,800));//只有放入这个,使其超过jscrollpane才有用   jsp=new JScrollPane(pi2);
   this.add(jsp,BorderLayout.CENTER);
   this.setVisible(true);
  
  }
  
}

}
/*
 * 
 * 此类是用来画背景的
 */
class PainImage extends JPanel {


int P_w=0;
int P_h=0; Image Img=null;

public PainImage(Image img){
this.Img=img;
P_w=Toolkit.getDefaultToolkit().getScreenSize().width;
P_h=Toolkit.getDefaultToolkit().getScreenSize().height;
//所谓Screen 即容器的满额
}

protected void paintComponent(Graphics g) {
// 清屏
super.paintComponent(g);
g.drawImage(Img, 0, 0, P_w, P_h, this);
} }


public static void main (String args[]){
Bar bar=new Bar("示例,示例啦");

}
                                      
}我想做到加入第二幅图片的时候,第一幅图片能不显示,可是结果如图所示
我想知道这是为什么???!!
及结局方案

解决方案 »

  1.   

    不要每次都new一个Panel出来这样改一下看看import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.filechooser.FileNameExtensionFilter;public class Bar extends JFrame implements ActionListener {
    JScrollPane jsp;
    JButton jb; PainImage pi2;
    File dirPath;
    JFileChooser chooser; public Bar(String name) {
    super(name); jb = new JButton("打开");
    jb.addActionListener(this); this.setLayout(new BorderLayout()); this.add(jb, BorderLayout.NORTH);
    this.setSize(300, 400);
    this.setVisible(true);
    pi2 = new PainImage();
    pi2.setPreferredSize(new Dimension(1400, 800));// 只有放入这个,使其超过jscrollpane才有用 jsp = new JScrollPane(pi2);
    this.add(jsp, BorderLayout.CENTER);
    this.setVisible(true);
    } @Override
    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    String type = arg0.getActionCommand();
    if (type == "打开") {
    if (dirPath == null) {
    chooser = new JFileChooser();
    } else
    chooser = new JFileChooser(dirPath);
    chooser.setDialogTitle("Open JPEG file"); // 用来对文件的类型的限定
    FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "jpg&png", "jpg", "png");
    chooser.setFileFilter(filter);
    int result = chooser.showOpenDialog(this); // 依附于 mainframecon 存在的
    if (result == JFileChooser.APPROVE_OPTION) {
    dirPath = chooser.getCurrentDirectory();// 设定当前打开目录
    chooser.setCurrentDirectory(dirPath);
    String filePath = chooser.getSelectedFile().getPath();// 得到所选文件的路径
    pi2.setImg(new ImageIcon(filePath).getImage());
    pi2.updateUI();
    }
    }
    } /*
     * 
     * 此类是用来画背景的
     */
    class PainImage extends JPanel { int P_w = 0;
    int P_h = 0;
    Image Img = null; public PainImage(Image img) {
    super();
    this.Img = img;
    } public PainImage() {
    super();
    }

    protected void paintComponent(Graphics g) {
    // 清屏
    super.paintComponent(g);
    if (Img != null) {
    g.drawImage(Img, 0, 0, P_w, P_h, this);
    }
    }

    public void setImg(Image img) {
    this.Img = img;
    P_w = Toolkit.getDefaultToolkit().getScreenSize().width;
    P_h = Toolkit.getDefaultToolkit().getScreenSize().height;
    } } public static void main(String args[]) {
    Bar bar = new Bar("示例,示例啦"); }}
      

  2.   

    不要每次都new一个Panel出来