从不以局部方式使用类型 ImageZoom 中的方法 getContentPanel()
//getContentPane,少些了一个L,应该是:getContentPanel. 否则调用出错,不会显示图片和滑块。
package e26_05;
import java.awt.*;
import java.net.*;
import javax.swing.*;
public class ImageZoom extends JFrame {
private static final long serialVersionUID=1L;
Image img;
private JPanel contentPanel=null;
private JSlider jSlider=null;
private int imgWidth,imgHeight;
private Canvas canvas=null;
public ImageZoom(){
initialize();
}
private void initialize(){
URL imageUrl=ImageZoom.class.getResource("img.jpg");
img=Toolkit.getDefaultToolkit().getImage(imageUrl);
canvas=new MyCanvas();
this.setBounds(100,100,800,600);
this.setContentPane(getContentPane()); //getContentPane,少些了一个L,应该是:getContentPanel. 否则调用出错,不会显示图片。和滑块。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("绘制图片");
}
//从不以局部方式使用类型 ImageZoom 中的方法 getContentPanel()
private JPanel getContentPanel(){
if(contentPanel==null){
contentPanel=new JPanel();
contentPanel.setLayout(new BorderLayout());
contentPanel.add(getJSlider(),BorderLayout.SOUTH);
contentPanel.add(canvas,BorderLayout.CENTER);
}
return contentPanel;
}
private JSlider getJSlider(){
if(jSlider==null){
jSlider=new JSlider();
jSlider.setMaximum(1000);
jSlider.setValue(100);
jSlider.setMinimum(1);
jSlider.addChangeListener(new javax.swing.event.ChangeListener(){
public void stateChanged(javax.swing.event.ChangeEvent e){
canvas.repaint();
}
});
}
return jSlider;
}
public static void main(String[] args){
new ImageZoom().setVisible(true);
}
class MyCanvas extends Canvas{
private static final long serialVersionUID=1L;
public void paint(Graphics g){
int newW=0,newH=0;
imgWidth=img.getWidth(this);
imgHeight=img.getHeight(this);
float value=jSlider.getValue();
newW=(int)(imgWidth*value/100);
newH=(int)(imgHeight*value/100);
g.drawImage(img, 0, 0, newW,newH,this);
}
}
}