Java基础学习之画板2

来源:互联网 发布:泰格软件使用教程 编辑:程序博客网 时间:2024/06/01 20:00

Java面向对象的三大特性:封装继承多态

为什么要引入封装呢?

一、属性类的封装

假设我们定义了一个Student类

package com.test.exercise_4;public class Student {public String name;public String sex;public String age;}
案例:如果有

小王,男,15岁

小李,女,14岁要存入队列中,我们可以用ArrayList来实现

package com.test.exercise_4;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();Student stu = new Student();stu.name = "小王";stu.sex = "男";stu.age = "15";list.add(stu.name);list.add(stu.sex);list.add(stu.age);Student stu2 = new Student();stu2.name = "小李";stu2.sex = "女";stu2.age = "14";list.add(stu2.name);list.add(stu2.sex);list.add(stu2.age);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}}
这样,代码就会很多重复性,而且,如果Student类再加入一些属性,还要知道要插入位置的索引,但是很多时候我们很难知道索引,这样我们就开始学习封装。

利用封装性,定义一个角色类,然后把所有的数据全部定义为这个类的属性,需要存储一个角色信息的时候,就定义一个角色类对象即可,把数据包装进去

 例如:(只要将两个对象存入就可以了,但是实际上我们存了6个数据)

package com.test.exercise_4;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<Student>();Student stu = new Student();stu.name = "小王";stu.sex = "男";stu.age = "15";list.add(stu);Student stu2 = new Student();stu2.name = "小李";stu2.sex = "女";stu2.age = "14";list.add(stu2);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i).name);System.out.println(list.get(i).sex);System.out.println(list.get(i).age);}}}
但是,这样有一个很大的缺陷:就是多个类的对象的存储时
list.get(i)

得到的对象不知道是哪个类的对象,下面就来介绍代码的方法封装

二、代码的方法封装

案例:如果需要定义一个容器,这个容器可以需要存不同角色的对象数据,如何完成?

Teacher

Student

定义一个抽象类作为Teacher类和Student类的父类,利用自动转型的对象调用子类重写的特点,实现了相同对象调用相同方法,结果不同。这就是多态

代码如下

package com.test.exercise_4;public abstract class Person {public String name;public String sex;public String age;public abstract void play();}

package com.test.exercise_4;public class Student extends Person {@Overridepublic void play() {System.out.println("学生在娱乐...");}}
package com.test.exercise_4;public class Teacher extends Person {@Overridepublic void play() {System.out.println("老师在娱乐...");}}
package com.test.exercise_4;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Person> list = new ArrayList<Person>();Person stu = new Student();Person tea = new Teacher();list.add(stu);list.add(tea);list.get(0).play();list.get(1).play();}}
结果:




三、匿名内部类

意思:匿名了子类名字的类

格式:父类的类名 对象名 = new父类的类名(){

对父类的方法重写

 };

举例:

package com.test.exercise_4;public abstract class Person {public String name;public String sex;public String age;public abstract void play();}
package com.test.exercise_4;public class Test {public static void main(String[] args) {Person person = new Person() {@Overridepublic void play() {System.out.println("老师在娱乐...");}};person.play();}}
结果:

四、画板重绘再分析

1、铅笔、直线、椭圆等图形都有类型、两个点、线条粗细、颜色等属性,定义一个抽象类MyShape来封装这些属性及绘画(draw方法)

2、DLine类继承MyShape重写draw方法画直线

3、DRect类继承MyShape重写draw方法画矩形

4、DOval类继承MyShape重写draw方法画椭圆

5、DRoundRect类继承MyShape重写draw方法画圆角矩形

6、重载构造方法,来进行图形对象属性的初始化过程

7、通过多态的操作,完成图形绘制功能和重绘

8、对DrawBoard类代码的优化,按照代码的不同功能分写为不同的方法,即每一个方法做一件事

9、重绘错位bug的解决,重绘图形时用从绘画板上拿的画笔g2(我所用的),也可以把重写的paint方法,修改到绘制区域的panel代码中,通过匿名内部类的方式实现

10、效果图

绘制图形:

改变窗体大小:


分析:绘制的图形在改变窗体前后没有变化,说明重绘成功

11、总结:好了,至此画板的基本功能就实现了,还有一些功能在后续的学习中慢慢探索,通过这次简单画板的学习,我收获了很多,也明白了自己以前写代码的不足之处(代码逻辑不清晰),以后在学习中慢慢改进,这个代码可能也有很多不足之处,希望各位多多指出

12、原代码

DrawBoard类

package com.test.lesson5;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.util.ArrayList;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.border.BevelBorder;/** * @liang *//********* 窗体 **********/public class DrawBoard extends JFrame {public ColorListener action = new ColorListener(this);public DrawListener listener;public JButton jbt1;// 队列用于存放所绘画的图形ArrayList<MyShape> list = new ArrayList<MyShape>();public Graphics2D g2;public JMenuBar menubar;public JMenu[] jm;public String[] st;public String[] a = new String[] { "新建(N)", "打开(O)", "保存(S)", "另存为(A)","从扫描仪或照相机(C)", "打印预览(V)", "页面设置(U)", "打印(P)", "发送(E)","设置为墙纸(平铺)(B)", "设置为墙纸(居中)(K)", "最近使用过得文件", "退出(X)", "撤销(U)","重复(R)", "剪切(T)", "复制(C)", "粘贴(P)", "清除选定内容(L)", "全选(A)", "复制到(O)","粘贴来源(F)", "翻转/旋转(F)", "拉伸/扭曲(S)", "反色(I)", "属性(A)", "清除图像(C)","编辑颜色(E)", "帮助主题(H)", "关于画图(A)", "文字工具栏(E)", "查看位图(V)", "常规尺寸(N)","大尺寸(L)", "自定义(U)", "显示网络(G)", "显示缩略图(H)" };public JCheckBoxMenuItem[] box;public String[] b;public JMenuItem[] jmi;public JPanel panelLeft;public JPanel panelDown;public JPanel panelCenter;public JPanel panelWhite;public JPanel panelU;/******************** 设置凹下去 **********************/public BevelBorder border = new BevelBorder(1, Color.white, Color.gray);public ButtonGroup bg;public JRadioButton jrb;public JPanel panelP;public JPanel panelA;public JPanel panelS;public JPanel panelX;public JPanel panelDownL;public JPanel panelx;public JPanel paneld;public Color[] c = { new Color(0, 0, 0), new Color(128, 128, 128),new Color(128, 0, 0), new Color(128, 128, 0), new Color(0, 128, 0),new Color(0, 128, 128), new Color(0, 0, 128),new Color(128, 0, 128), new Color(128, 128, 64),new Color(0, 64, 64), new Color(0, 128, 255),new Color(0, 64, 128), new Color(128, 0, 255),new Color(128, 64, 0),new Color(255, 255, 255), new Color(192, 192, 192),new Color(255, 0, 0), new Color(255, 255, 0), new Color(0, 255, 0),new Color(0, 255, 255), new Color(0, 0, 255),new Color(255, 0, 255), new Color(255, 255, 128),new Color(0, 255, 128), new Color(128, 255, 255),new Color(128, 128, 255), new Color(255, 0, 128),new Color(255, 128, 64) };public JButton[] but = new JButton[28];// Color color;/********* 初始化 **********/public void init() {this.frameTitle();this.menuBarOfAdd();this.firstPanelOfAdd();this.LeftToolOfAdd();this.addPanelToCenter();this.southPanelOfAdd();this.southToolOfAdd();// 窗体可见this.setVisible(true);// 获取画笔this.getDrawPen();}/* * 窗体属性 的添加 */public void frameTitle() {this.setSize(600, 600);this.setTitle("DrawBoard");this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);}/* * 菜单栏的添加 */public void menuBarOfAdd() {this.addMenu();this.addCheckItem();this.addItem();}/* * 第一层面板即(左、中、下面板)的添加 */public void firstPanelOfAdd() {this.addLeftPanel();this.addDownPanel();this.addCenterPanel();}/* * 左边功能的添加 */public void LeftToolOfAdd() {this.addPanelUpToLeft();this.addRadioToLeft();this.addPanelDownToLeft();}/* * 南面基础面板的添加 */public void southPanelOfAdd() {this.addPanelToUpOfSouth();this.addPanelToDownOfSouth();this.addPanelToLeftOfUpOfSouth();this.addPanelToLeftOfLeftOfUpOfSouth();this.addPanelToRightOfLeftOfUpOfSouth();}/* * 南面功能的添加 */public void southToolOfAdd() {this.addLabelToEnd();this.addTwoButton();this.addColorButton();}/* * 菜单的添加 */public void addMenu() {menubar = new JMenuBar();// 菜单条的边框为凸起menubar.setBorder(new BevelBorder(0));menubar.setBackground(new Color(245, 246, 247));// 菜单jm = new JMenu[7];st = new String[] { "文件(F)", "编辑(E)", "查看(V)", "图像(I)", "颜色(C)","帮助(H)", "缩放(Z)" };for (int i = 0; i < jm.length; i++) {jm[i] = new JMenu(st[i]);// 设置菜单字体、样式、字号jm[i].setFont(new Font("TimesRoman", Font.PLAIN, 13));if (i != 6) {menubar.add(jm[i]);}}// 将菜单条放到窗体中this.setJMenuBar(menubar);}/* * 复选菜单项的添加 */public void addCheckItem() {// 复选菜单项box = new JCheckBoxMenuItem[4];b = new String[] { "工具箱(T)", "颜料盒(C)", "状态栏(S)", "不透明处理(D)" };for (int i = 0; i < box.length; i++) {box[i] = new JCheckBoxMenuItem(b[i]);box[i].setSelected(true);box[i].setFont(new Font("Courier", Font.PLAIN, 13));if (i != 3) {jm[2].add(box[i]);}}}/* * 菜单项的添加 */public void addItem() {// 菜单项jmi = new JMenuItem[37];for (int i = 0; i < jmi.length; i++) {jmi[i] = new JMenuItem(a[i]);jmi[i].setFont(new Font("Courier", Font.PLAIN, 13));if (i < 13) {jm[0].add(jmi[i]);} else if (i >= 13 && i < 22) {jm[1].add(jmi[i]);} else if (i >= 22 && i < 27) {jm[3].add(jmi[i]);} else if (i == 27) {jm[4].add(jmi[i]);} else if (i > 27 && i < 30) {jm[5].add(jmi[i]);} else if (i == 30) {jm[2].add(jmi[i]);}}jm[2].add(jm[6]);jm[2].add(jmi[31]);for (int i = 32; i < jmi.length; i++) {jm[6].add(jmi[i]);}jm[3].add(box[3]);}/* * 窗体左边面板的添加 */public void addLeftPanel() {panelLeft = new JPanel();// setSize方法只能用于窗体设置大小,其他设置大小均用setPreferredSize方法panelLeft.setPreferredSize(new Dimension(50, 100));panelLeft.setBackground(new Color(240, 240, 240));panelLeft.setLayout(new FlowLayout(0, 0, 0));this.add(panelLeft, BorderLayout.WEST);}/* * 窗体南面面板的添加 */public void addDownPanel() {panelDown = new JPanel();panelDown.setPreferredSize(new Dimension(600, 58));panelDown.setBackground(new Color(235, 235, 235));panelDown.setLayout(new FlowLayout(0, 0, 0));this.add(panelDown, BorderLayout.SOUTH);}/* * 窗体中间面板的添加 */public void addCenterPanel() {panelCenter = new JPanel();// 设置panelCenter的边框特效panelCenter.setBorder(new BevelBorder(1, Color.white, Color.gray));panelCenter.setBackground(new Color(171, 171, 171));panelCenter.setLayout(new FlowLayout(0, 0, 0));this.add(panelCenter);}/* * 添加绘画区面板到中间面板 */public void addPanelToCenter() {panelWhite = new JPanel();panelWhite.setBorder(new BevelBorder(1, Color.white, Color.gray));panelWhite.setBackground(Color.white);panelWhite.setPreferredSize(new Dimension(400, 400));panelCenter.add(panelWhite);}/* * 添加面板到窗体左边面板的上面 */public void addPanelUpToLeft() {panelU = new JPanel();panelU.setPreferredSize(new Dimension(50, 30));panelU.setBackground(new Color(240, 240, 240));panelLeft.add(panelU);}/* * 添加单选按钮到窗体左边面板 */public void addRadioToLeft() {bg = new ButtonGroup();for (int i = 0; i < 16; i++) {jrb = new JRadioButton();/*************** 默认选中铅笔 ********************/if (i == 6) {jrb.setSelected(true);}/********************** 给JRadioButton添加图片 ****************************/jrb.setIcon(new ImageIcon("Image/draw" + i + ".jpg"));jrb.setRolloverIcon(new ImageIcon("Image/draw" + i + "-1.jpg"));jrb.setPressedIcon(new ImageIcon("Image/draw" + i + "-2.jpg"));jrb.setSelectedIcon(new ImageIcon("Image/draw" + i + "-3.jpg"));/******************** 给JRadioButton添加命令 **********************/jrb.setActionCommand("tuxing" + i);/******************** 给JRadioButton无 边界 **********************/jrb.setBorder(null);bg.add(jrb);panelLeft.add(jrb);}}/* * 添加面板到窗体左边面板的下面 */public void addPanelDownToLeft() {panelP = new JPanel();panelP.setPreferredSize(new Dimension(50, 70));panelLeft.add(panelP);panelA = new JPanel();panelA.setPreferredSize(new Dimension(40, 70));panelA.setBackground(new Color(240, 240, 240));panelA.setBorder(border);panelP.add(panelA);}/* * 添加面板到窗体南面面板的上面 */public void addPanelToUpOfSouth() {panelS = new JPanel();panelS.setPreferredSize(new Dimension(600, 38));panelS.setLayout(new FlowLayout(0, 0, 8));panelDown.add(panelS);}/* * 添加面板到窗体南面面板的下面 */public void addPanelToDownOfSouth() {panelX = new JPanel();panelX.setBorder(border);panelX.setPreferredSize(new Dimension(600, 20));panelX.setLayout(new FlowLayout(0, 0, 0));panelDown.add(panelX);}/* * 添加标签到窗体南面面板的下面面板上 */public void addLabelToEnd() {JLabel jl = new JLabel("要获得帮助,请在”帮助“菜单中,单击“帮助主题。");jl.setFont(new Font("Courier", Font.PLAIN, 13));jl.setBackground(new Color(240, 240, 240));panelX.add(jl);}/* * 在窗体南面面板的上面面板的左边添加一个面板 */public void addPanelToLeftOfUpOfSouth() {panelDownL = new JPanel();panelDownL.setPreferredSize(new Dimension(240, 30));panelDownL.setLayout(new FlowLayout(0, 0, 0));panelS.add(panelDownL);}/* * 在窗体南面面板的上面面板的左边面板的左边添加一个面板 */public void addPanelToLeftOfLeftOfUpOfSouth() {panelx = new JPanel();panelx.setPreferredSize(new Dimension(30, 30));panelx.setBackground(new Color(245, 245, 245));panelx.setLayout(null);panelx.setBorder(border);panelDownL.add(panelx);}/* * 在窗体南面面板的上面面板的左边面板的右边添加一个面板 */public void addPanelToRightOfLeftOfUpOfSouth() {paneld = new JPanel();paneld.setPreferredSize(new Dimension(210, 30));paneld.setLayout(new FlowLayout(0, 0, 0));panelDownL.add(paneld);}/* * 在窗体南面面板的上面面板的左边面板的左边面板添加两个部分重叠的按钮 */public void addTwoButton() {jbt1 = new JButton();jbt1.setBounds(5, 5, 15, 15);jbt1.setBorder(border);jbt1.setBackground(Color.black);panelx.add(jbt1);JButton jbt2 = new JButton();jbt2.setBounds(10, 10, 15, 15);jbt2.setBackground(Color.white);jbt2.setBorder(border);panelx.add(jbt2);}/* * 在窗体南面面板的上面面板的左边面板的右边面板添加28个颜色按钮 */public void addColorButton() {for (int i = 0; i < but.length; i++) {but[i] = new JButton();but[i].setPreferredSize(new Dimension(15, 15));but[i].setBorder(border);but[i].setBackground(c[i]);paneld.add(but[i]);// 按钮添加监听but[i].addActionListener(action);}}/* * 在绘画区面板上获取画笔 */public void getDrawPen() {Graphics g = panelWhite.getGraphics();g2 = (Graphics2D) g;listener = new DrawListener(g2, bg, list);panelWhite.addMouseListener(listener);panelWhite.addMouseMotionListener(listener);}/* * (non-Javadoc) *  * @see java.awt.Window#paint(java.awt.Graphics) */public void paint(Graphics g) {super.paint(g);for (int i = 0; i < list.size(); i++) {MyShape shape = list.get(i);shape.draw(g2);}}}
DrawListener类

package com.test.lesson5;import java.awt.AWTException;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.Robot;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.image.BufferedImage;import java.util.ArrayList;import java.util.Random;import javax.swing.ButtonGroup;import javax.swing.ButtonModel;public class DrawListener implements MouseListener, MouseMotionListener {public Graphics2D g;public ButtonGroup bg;public int x1, y1, x2, y2, x3, y3, x4, y4;public String command;public Random r = new Random();public boolean flag = true;Color color = Color.black;ArrayList<MyShape> list;public BasicStroke basic = new BasicStroke(1.0f);public BasicStroke basic2 = new BasicStroke(10.0f);/* * 重载该类的构造方法 */public DrawListener(Graphics2D g, ButtonGroup bg, ArrayList<MyShape> list) {this.g = g;this.bg = bg;this.list = list;}/* * 按下(non-Javadoc) *  * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) */public void mousePressed(MouseEvent e) {x1 = e.getX();y1 = e.getY();// 获取JRadioButton上的命令ButtonModel model = bg.getSelection();command = model.getActionCommand();/* * 里面的参数一定要是color,不然取色等于无 ,颜色默认的设置在鼠标按下的时候设置,刷子在拖动的过程中不会释放 相当于要写字的时候才拿笔 */g.setColor(color);// 设置粗细g.setStroke(basic);}/* * 释放(non-Javadoc) *  * @see * java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) */public void mouseReleased(MouseEvent e) {/********************** 获取拖动到第二点坐标 *************************/x2 = e.getX();y2 = e.getY();/********************** 直线、矩形、圆角矩形、多边形、取色器 *************************/if ("tuxing10".equals(command)) {MyShape shape = new DLine(1, color, basic, x1, y1, x2, y2);list.add(shape);shape.draw(g);} else if ("tuxing12".equals(command)) {MyShape shape = new DRect(2, color, basic, x1, y1, x2, y2);list.add(shape);shape.draw(g);} else if ("tuxing14".equals(command)) {MyShape shape = new DOval(3, color, basic, x1, y1, x2, y2);list.add(shape);shape.draw(g);} else if ("tuxing15".equals(command)) {MyShape shape = new DRoundRect(1, color, basic, x1, y1, x2, y2);list.add(shape);shape.draw(g);} else if ("tuxing13".equals(command)) {if (flag) {MyShape shape = new DLine(1, color, basic, x1, y1, x2, y2);list.add(shape);shape.draw(g);// 保存第一次按下的坐标x3 = x1;y3 = y1;// flag改变flag = false;} else {MyShape shape = new DLine(1, color, basic, x4, y4, x2, y2);list.add(shape);shape.draw(g);}x4 = x2;y4 = y2;} else if ("tuxing1".equals(command)) {try {Robot robot = new Robot();BufferedImage image = robot.createScreenCapture(new Rectangle(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),Math.abs(y1 - y2)));image.createGraphics();} catch (AWTException e1) {e1.printStackTrace();}}}/* * 拖动(non-Javadoc) *  * @see * java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent * ) */public void mouseDragged(MouseEvent e) {/********************** 获取拖动到第二点坐标 *************************/x2 = e.getX();y2 = e.getY();/********************** 橡皮擦、铅笔、刷子、喷枪 *************************/if ("tuxing2".equals(command)) {MyShape shape = new DLine(1, Color.white, basic2, x1, y1, x2, y2);list.add(shape);shape.draw(g);x1 = x2;y1 = y2;} else if ("tuxing6".equals(command)) {MyShape shape = new DLine(1, color, basic, x1, y1, x2, y2);list.add(shape);shape.draw(g);x1 = x2;y1 = y2;} else if ("tuxing7".equals(command)) {MyShape shape = new DLine(1, color, basic2, x1, y1, x2, y2);list.add(shape);shape.draw(g);x1 = x2;y1 = y2;} else if ("tuxing8".equals(command)) {for (int i = 0; i < 50; i++) {int a = r.nextInt(31) - 15;int b = r.nextInt(31) - 15;// 以点为半径MyShape shape = new DLine(1, color, basic, x2 + a, y2 + b, x2+ a, y2 + b);list.add(shape);shape.draw(g);}}}/* * 点击(non-Javadoc) *  * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) */public void mouseClicked(MouseEvent e) {/***************** 多边形双击动作 *******************************/if ("tuxing13".equals(command)) {if (e.getClickCount() == 2) {g.drawLine(x2, y2, x3, y3);MyShape shape = new DLine(1, color, basic, x2, y2, x3, y3);list.add(shape);shape.draw(g);// flag恢复默认trueflag = true;}} else if ("tuxing4".equals(command)) {// 取坐标,相对于屏幕的坐标,不然有错x2 = e.getXOnScreen();y2 = e.getYOnScreen();// 截图try {Robot robot = new Robot();// 默认一个像素的宽高都是1BufferedImage image = robot.createScreenCapture(new Rectangle(x2, y2, 1, 1));// 截取的一块矩形只有一个像素点,所以坐标是(0,0)color = new Color(image.getRGB(0, 0));} catch (AWTException e1) {e1.printStackTrace();}}}public void mouseMoved(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}}
ColorListener类

package com.test.lesson5;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;public class ColorListener implements ActionListener {public Color color;public DrawBoard db;// 要将当前color传到DrawListener中,要获得DrawListener的对象,而该对象在DrawListener中,所以public ColorListener(DrawBoard db) {this.db = db;}public void actionPerformed(ActionEvent e) {// 原本e.getSourse得到的是Object类型的,强制转换为JButtonJButton jb = (JButton) e.getSource();color = jb.getBackground();db.listener.color = color;db.jbt1.setBackground(color);}}
MyShape类

package com.test.lesson5;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;public abstract class MyShape {public int f, x1, y1, x2, y2;public Color color;public BasicStroke basic;public abstract void draw(Graphics2D g);}
DLine类

package com.test.lesson5;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;public class DLine extends MyShape {@Overridepublic void draw(Graphics2D g) {g.setColor(color);// 设置粗细g.setStroke(basic);g.drawLine(x1, y1, x2, y2);}// 重载构造函数public DLine(int f, Color color, BasicStroke basic, int x1, int y1, int x2,int y2) {this.f = f;this.color = color;this.color = color;this.basic = basic;this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;}}
DRect类

package com.test.lesson5;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;public class DRect extends MyShape {@Overridepublic void draw(Graphics2D g) {g.setColor(color);// 设置粗细g.setStroke(basic);g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),Math.abs(y1 - y2));}// 重载构造函数public DRect(int f, Color color, BasicStroke basic, int x1, int y1, int x2,int y2) {this.f = f;this.color = color;this.basic = basic;this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;}}
DOval类

package com.test.lesson5;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;public class DOval extends MyShape {@Overridepublic void draw(Graphics2D g) {g.setColor(color);// 设置粗细g.setStroke(basic);g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),Math.abs(y1 - y2));}// 重载构造函数public DOval(int f, Color color, BasicStroke basic, int x1, int y1, int x2,int y2) {this.f = f;this.color = color;this.basic = basic;this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;}}
DRoundRect类

package com.test.lesson5;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;public class DRoundRect extends MyShape {@Overridepublic void draw(Graphics2D g) {g.setColor(color);// 设置粗细g.setStroke(basic);g.drawRoundRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),Math.abs(y1 - y2), 40, 40);}// 重载构造函数public DRoundRect(int f, Color color, BasicStroke basic, int x1, int y1,int x2, int y2) {this.f = f;this.color = color;this.basic = basic;this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;}}
Test类

package com.test.lesson5;public class Test {public static void main(String[] args) {DrawBoard db = new DrawBoard();db.init();}}










0 0
原创粉丝点击