实例017 缩放图形
实例说明
本实例演示在Java中绘制图形时,如何对图形进行缩放,包括对图形进行放大、缩小和还原等操作。运行程序,效果如图1.17所示,用户可以通过单击窗体中的“放大”、“缩小”和“还原”按钮,对窗体上的图形进行相应操作。
关键技术
本实例主要是通过在JPanel类的子类中,重写JComponent类的paint()方法,并在该方法中使用Graphics2D类的scale()方法来实现的。
使用Graphics2D类的scale()方法,可以实现图形的缩放,该方法的定义如下:
public abstract void scale(double sx, double sy)
参数说明
? sx:与原图形x坐标值相乘的量,如果sx大于1.0,则在X坐标轴上放大原图形;如果sx小于1.0,则在X坐标轴上缩小原图形。
? sy:与原图形y坐标值相乘的量,如果sy大于1.0,则在Y坐标轴上放大原图形;如果sy小于1.0,则在Y坐标轴上缩小原图形。
设计过程
(1)新建一个项目。
(2)在项目中创建一个继承JFrame类的ZoomShapeFrame窗体类。
(3)在ZoomShapeFrame窗体类中,创建内部面板类ZoomShapePanel,并重写JComponent类的paint()方法,在该方法中使用Graphics2D类的scale()方法缩放图形。
(4)将内部面板类ZoomShapePanel的实例,添加到窗体类ZoomShapeFrame的内容面板上,用于在窗体上显示缩放后的图形,代码如下:
class ZoomShapePanel extends JPanel { // 创建内部面板类
public void paint(Graphics g) { // 重写paint()方法
Graphics2D g2 = (Graphics2D) g; // 获得Graphics2D对象
Rectangle2D.Float rect = new Rectangle2D.Float(120, 50, 80, 50); // 创建矩形对象
BasicStroke stroke = new BasicStroke(10); // 创建宽度是10的笔画对象
g2.setStroke(stroke); // 设置笔画对象
g2.clearRect(0, 0, 338, 220); // 清除原有内容
if (flag == 0) {
g2.draw(rect); // 绘制原矩形
} else if (flag == 1) {
g2.scale(1.3, 1.3); // 放大1.3倍
g2.draw(rect); // 绘制矩形
} else if (flag == 2) {
g2.scale(0.5, 0.5); // 缩小0.5倍
g2.draw(rect); // 绘制矩形
}
}
}
U 注意:上面代码中的flag是一个标记变量,当该变量的值为0时,图形显示为原来的大小;为1时,对图形进行放大;为2时,对图形进行缩小。
秘笈心法
心法领悟017:复杂问题简单化。
在程序设计中,当某些操作相关联,而且实现起来比较困难时,可以通过定义标记变量将复杂问题简单化。方法是,使用if条件语句对标记变量的不同取值进行判断,以实现不同的操作,如本实例就使用了标记变量flag,实现了对图形的缩放操作。