请教如何用JScrollPane显示image 图片显示最终是要用到这句语句 g.drawImage(screen, 0, 0, this);其中screen是一个BufferedImage,且时时动态加载(不断更新)我试了很多种方法 就是不能让滚动条良好运作 请问高手们应该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 g.drawImage(screen, 0, 0, this);是赶不出滚动条的,不管screen多大。只有高级组件放入JScrollPane才会出现滚动条 可以把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" 完善了几下,可以选择图片在面板上显示,动态调整//////////////////////////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); } } }} 如果是作为背景的话,重载paint方法.如果是像组件一样加入的话,可以封装到ImageIcon里.然用用setViewportView方法. 大花猫真是强悍啊,解决了我一个很大的困扰,结合ImageIcon,setPreferredSize,updateUI和repaint()解决了在scrollPane里图片实时更新的问题,真是高手啊大赞一个 结帖~回楼上的朋友hoverless,你的方法只能解决静态图片显示,或者不能够scroll,你没有看清我的问题。 加上这个就可以运行上楼大花猫给的例子了. 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); }} 疑问 java代码如何获取今天最早的时间 如何获取容器中的容器? 新手,求救,“”and null 新手关于java Vector类的问题 哪里可以考SUN公司认证的JAVA证书? rmi 和 jms有啥区别啊? MM有礼了!GG帮忙! 哪位大哥能帮小弟分一下java的种类? Hashtable java可以做MDI窗口程序吗? ----------------->有谁知道软件专业研究生和博士分别有那些课程啊
//-------------------
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"
//////////////////////////
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);
}
}
}
}
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);
}}