图片显示最终是要用到这句语句 g.drawImage(screen, 0, 0, this);
其中screen是一个BufferedImage,且时时动态加载(不断更新)
我试了很多种方法 就是不能让滚动条良好运作 
请问高手们应该怎么做?

解决方案 »

  1.   

    g.drawImage(screen, 0, 0, this);是赶不出滚动条的,不管screen多大。只有高级组件放入JScrollPane才会出现滚动条
      

  2.   

    可以把Jpanel放入JScrollPane,把Jpanel的大小设成图片的大小,在Jpanel上画出图片
    //-------------------
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;public class C extends JScrollPane {
      private static final long serialVersionUID = 1L;
      private MyPanel jPanel = null;
      Image img = null;  public C() {
        super();
        initialize();
      }  private void initialize() {
        this.setViewportView(getJPanel());
      }  private JPanel getJPanel() {
        if (jPanel == null) {
          jPanel = new MyPanel();
          jPanel.setLocation(0, 0);
          jPanel.setPreferredSize(new Dimension(2272, 1704));
          img = Toolkit.getDefaultToolkit().createImage("D://cxz//CanonPicture//2007_01_01//IMG_0280.jpg");
          jPanel.setLayout(null);
        }
        return jPanel;
      }  class MyPanel extends JPanel {
        public void paint(Graphics g) {
          ((Graphics2D) g).drawImage(img, 0, 0, this);
        }
      }
    } //  @jve:decl-index=0:visual-constraint="10,10"
      

  3.   

    完善了几下,可以选择图片在面板上显示,动态调整
    //////////////////////////
    package image;import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.Toolkit;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;public class DF extends JPanel {
      private static final long serialVersionUID = 1L;
      private ImagePanel c = null;
      private JButton jButton = null;  public DF() {
        super();
        initialize();
      }  private void initialize() {
        this.setSize(300, 200);
        this.setLayout(null);
        this.add(getC(), null);
        this.add(getJButton(), null);
      }  private ImagePanel getC() {
        if (c == null) {
          c = new ImagePanel();
          c.setBounds(new Rectangle(25, 49, 243, 139));
        }
        return c;
      }  private void opfile() {
        JFileChooser chooser = new JFileChooser();
        if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
          String fname = chooser.getSelectedFile().getAbsolutePath();
          System.out.println(fname);
          c.setImage(fname);
        }
      }  private JButton getJButton() {
        if (jButton == null) {
          jButton = new JButton();
          jButton.setBounds(new Rectangle(36, 11, 100, 30));
          jButton.setText("选择图片");
          jButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
              opfile();
            }
          });
        }
        return jButton;
      }  class ImagePanel extends JScrollPane {
        private static final long serialVersionUID = 1L;
        private MyPanel jPanel = null;
        Image img = null;    public ImagePanel() {
          super();
          this.setViewportView(getJPanel());
        }    void setImage(String filename) {
          img = Toolkit.getDefaultToolkit().createImage(filename);
          ImageIcon icon = new ImageIcon(img);
          jPanel.setPreferredSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
          jPanel.updateUI();
          jPanel.repaint();
        }    private JPanel getJPanel() {
          if (jPanel == null) {
            jPanel = new MyPanel();
            jPanel.setLocation(0, 0);
            jPanel.setLayout(null);
          }
          return jPanel;
        }    class MyPanel extends JPanel {
          public void paint(Graphics g) {
            g.drawImage(img, 0, 0, this);
          }
        }
      }
    }
      

  4.   

    如果是作为背景的话,重载paint方法.如果是像组件一样加入的话,可以封装到ImageIcon里.然用用setViewportView方法.
      

  5.   

    大花猫真是强悍啊,解决了我一个很大的困扰,结合ImageIcon,setPreferredSize,updateUI和repaint()解决了在scrollPane里图片实时更新的问题,真是高手啊大赞一个 结帖~回楼上的朋友hoverless,你的方法只能解决静态图片显示,或者不能够scroll,你没有看清我的问题。
      

  6.   

    加上这个就可以运行上楼大花猫给的例子了. import java.awt.GridLayout;import javax.swing.JFrame;
    public class Test { private JFrame frame; /**
     * Launch the application
     * @param args
     */
    public static void main(String args[]) {
    try {
    Test window = new Test();
    window.frame.setVisible(true);
    } catch (Exception e) {
    e.printStackTrace();
    }
    } /**
     * Create the application
     */
    public Test() {
    initialize();
    } /**
     * Initialize the contents of the frame
     */
    private void initialize() {
    frame = new JFrame();
    frame.getContentPane().setLayout(new GridLayout());
    frame.setBounds(100, 100, 500, 375);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final DF panel = new DF();
    frame.getContentPane().add(panel);

    }}