实例019 斜切图形
实例说明
本实例演示在Java中绘制图形时,如何对图形进行斜切。运行程序,单击窗体上的“上斜切”按钮,可以实现对矩形进行向上斜切的操作,效果如图1.19所示,用户还可以通过单击窗体上的“下斜切”和“还原”按钮,对窗体上的图形进行向下斜切和还原等操作。
关键技术
本实例主要是通过在JPanel类的子类中,重写JComponent类的paint()方法,并在该方法中使用Graphics2D类的shear()方法来实现的。
使用Graphics2D类的shear()方法,可以实现图形的斜切,该方法的定义如下:
public abstract void shear(double shx, double shy)
参数说明
? shx:在正X轴方向移动坐标的乘数,它可以作为相应y坐标的函数。
? shy:在正Y轴方向移动坐标的乘数,它可以作为相应x坐标的函数。
设计过程
(1)新建一个项目。
(2)在项目中创建一个继承JFrame类的ShearShapeFrame窗体类。
(3)在ShearShapeFrame窗体类中,创建内部面板类ShearShapePanel,并重写JComponent类的paint()方法,在该方法中使用Graphics2D类的shear()方法斜切图形。
(4)将内部面板类ShearShapePanel的实例,添加到窗体类ShearShapeFrame的内容面板上,用于在窗体上显示斜切后的图形,代码如下:
class ShearShapePanel 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, 230); // 清除原有内容
if (flag == 0) {
g2.draw(rect); // 绘制原矩形
} else if (flag == 1) {
g2.shear(0.2,0.2); // 向下斜切
g2.draw(rect); // 绘制矩形
} else if (flag == 2) {
g2.shear(-0.2,-0.2); // 向上斜切
g2.draw(rect); // 绘制矩形
}
}
}
U 注意:上面代码中的flag是一个标记变量,当该变量的值为0时,图形还原到原来的位置;为1时,对图形进行向下斜切;为2时,对图形进行向上斜切。
秘笈心法
心法领悟019:任意调整斜切方向。
使用Graphics2D类的shear(double shx, double shy)方法可以对图形进行斜切,用户通过调整该方法的两个参数值,就可以任意调整斜切方向。