在未加JScrollPane前 带图片的JPanel能显示
为什么把它加在JScrollPane中就不能显示了 谢谢
JScrollPane如何使用
注:用到的图片为 "C:/Pig.JPG"的大约130*130图片
代码1
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileFilter;
import java.io.*;
import javax.imageio.*;public class Test extends JFrame
{
public JPanel panel;
public JScrollPane p;

public static void main(String args[]) 
{  
    Test demo = new Test();
demo.setTitle("Test ");
demo.setVisible(true);
}

public Test()
{
this.setSize(1000,500);
    Container contentPane = getContentPane();
    
    panel = new JPanel();     ImageBox box = new ImageBox("C:/Pig.JPG");
    box.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent e) {
System.out.println("mousePressed1()");
}
});
    
    panel.add(box);        contentPane.add(panel);
}
}
代码2
class ImageBox extends JLabel
{
  private Image img;
  public int imageWidth;  
  public int imageHeight;
  
  public ImageBox(String name)
  {
    super(new ImageIcon(name));
  }
}
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileFilter;
import java.io.*;
import javax.imageio.*;public class Test extends JFrame
{
public JPanel panel;
public JScrollPane p;

public static void main(String args[]) 
{  
    Test demo = new Test();
demo.setTitle("Test ");
demo.setVisible(true);
}

public Test()
{
this.setSize(1000,500);
    Container contentPane = getContentPane();
    p = new JScrollPane();
    p.setBounds(300,300,300,300);     
    contentPane.add(p);
    
    panel = new JPanel();     ImageBox box = new ImageBox("C:/Pig.JPG");
    box.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent e) {
System.out.println("mousePressed1()");
}
});
    
    panel.add(box);        p.add(panel);  
}
}class ImageBox extends JLabel
{
  private Image img;
  public int imageWidth;  
  public int imageHeight;
  
  public ImageBox(String name)
  {
    super(new ImageIcon(name));
  }
}

解决方案 »

  1.   

    public Test()
    {
    this.setSize(1000,500);
        Container contentPane = getContentPane();
        p = new JScrollPane();
        p.setBounds(300,300,300,300);     
        contentPane.add(p); // 新建了一个JScrollPane, 但是并没有把JPanel加入到JScrollPane中.
        
        panel = new JPanel();    ImageBox box = new ImageBox("C:/Pig.JPG");
        box.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mousePressed(java.awt.event.MouseEvent e) {
    System.out.println("mousePressed1()");
    }
    }); 可以改为如下试试:public Test()
    {
    this.setSize(1000,500);
        Container contentPane = getContentPane();
        panel = new JPanel();
        p = new JScrollPane(panel); // 在创建JScrollPane的时候把panel作为他的构造函数的参数, 
        // 这样, panel就会被加到JScrollPane中.
        p.setBounds(300,300,300,300);     
        contentPane.add(p); 
        
            ImageBox box = new ImageBox("C:/Pig.JPG");
        box.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mousePressed(java.awt.event.MouseEvent e) {
    System.out.println("mousePressed1()");
    }
    }); 另一种方法:
    public Test()
    {
    this.setSize(1000,500);
        Container contentPane = getContentPane();
        p = new JScrollPane();
        p.setBounds(300,300,300,300);     
        contentPane.add(p);
        
        panel = new JPanel();
        p.getViewport().setView(panel); // 先创建JScrollPane, 然后动态的向JScrollPane中加入组件.    ImageBox box = new ImageBox("C:/Pig.JPG");
        box.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mousePressed(java.awt.event.MouseEvent e) {
    System.out.println("mousePressed1()");
    }
    }); 
      

  2.   

    你是要使用JScrollPane实现自动滚动吗?
    JScrollPane jp = new JScrollPane();
    jp.setVerticalScrollBarPolicy(JScrollPane.verticalScrollBarPolicy);
    jp.setHorizontalScrollBarPolicy(JScrollPane.horizontalScrollBarPolicy);
    JPanel panel = new JPanel();
    jp.getViewport().add(panel);
    注意如果需要滚动的时候,
    设置一下panel的大小 panel.setPreferredSize(new Dimension(width,height));
      

  3.   

    楼上解释的好清楚。JScrollPane是不能像JPanel一样直接add进去就显示出来的,必须在构造他(new)的时候,把要显示的控件对象作为参数传给他,才会正常显示。例如有个表格tab,要放进去就要JScrollPane p=new JScrollPane(tab);要后期加进去的话就用p.getViewport().setView(tab); 来取代add
      

  4.   

    p.getViewport().add(tab) 也应该可以