添加一个滑动组件,实现图片的缩放。
代码:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Demo6 extends JFrame{
//实现图片的灵活缩放
Image img;
private MyCanvas canvas = null;
private JPanel contentPanel = null;
private JSlider jSlider = null;
private int imgWidth,imgHeight;
public Demo6(){
URL url = this.getClass().getResource("img1.jpg");
img = Toolkit.getDefaultToolkit().getImage(url);
canvas = new MyCanvas();
this.setBounds(100, 100, 800, 600);
this.setContentPane(getContentPanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("实战1");
}
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(100);//设置滑块的最小取值
jSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
canvas.repaint();//重新绘制画板内容
}
});
}
return jSlider;
}
public static void main(String[] args) {
Demo6 demo = new Demo6();
demo.setVisible(true);
}
//继承Canvas类以便重写paint()方法可以清理组件原来的内容
public class MyCanvas extends Canvas{
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);// 绘制指定大小的图片
}
}
}