实验三绘制图形一、实验目的学会JButton的使用,能进行JButton的基本操作,能使用JButton构造一个图形界面框架通过实验熟悉swing图形用户界面程序设计熟悉java中的事件处理模型,每个事件动作代表的意义进一步提高编程能力,学会独立思考,学会上网查找资料决问题。
二、实验内容设计一个程序,该程序能够绘制基本的图形(包括圆形、矩形、直线等);要求有一个简单易操作的用户界面(包括菜单、按钮等组件)。
编写的程序要求能够实现保存和读取的功能。
三、实验代码Main.javaimport ;import ;import ;importimportimportimport winpaint.WinToolBar;import winpaint.windowsPaint;public class Main {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubJPanel paintWin = new windowsPaint("画图");paintWin.setBounds(0, 30, 1000, 1000);paintWin.setLayout(null);paintWin.setVisible(true);JToolBar tool = new WinToolBar((windowsPaint)paintWin);tool.setBounds(0, 0, 1000, 30);tool.setVisible(true);JFrame frame = new JFrame();frame.setLayout(null);frame.setVisible(true);frame.setBounds(0, 0, 1000, 1000);frame.add(tool);frame.add(paintWin);}}test.javaimport base.GrapicsElem;import base.Rect;public class testfractor {/*** @param args* @throws ClassNotFoundException*/public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stubGrapicsElem Ge = new Rect();Class<?> demo1=null;Class<?> demo2=null;Class<?> demo3=null;try{//一般尽量采用这种形式demo1=Class.forName("base.Rect");Class<?> con= demo1.getSuperclass();demo2 = Class.forName("base.GrapicsElem");Class<?> suns[] = demo2.getInterfaces();for (int i = 0; i < suns.length; i++) {}// GrapicsElem gg = (GrapicsElem)con[0].newInstance();con[0]);con[1]);con[2]);}catch(Exception e){e.printStackTrace();}demo2=new Rect().getClass();demo3=Rect.class;}}GrapicsElem.javapackage base;importimportimportpublic abstract class GrapicsElem {Point start;Point end;private Color color;public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}public void setStart(Point start) {this.start = start;}public void setEnd(Point end) {this.end = end;}public abstract void doMousePress(Point p);public abstract void doMouseDrag(Point p);public abstract void doMouseRelease(Point p);public abstract void draw(Graphics g ) ;}Line.javapackage base;importimportimportpublic class Line extends GrapicsElem {ArrayList<Point> track;public Line(){track = new ArrayList<Point>();}@Overridepublic void draw(Graphics g) {for (int i = 0; i < track.size()-1; i++) {Point cur = track.get(i);Point next = track.get(i+1);g.drawLine(cur.x, cur.y, next.x, next.y);}}private void AddPoint(Point p){track.add(p);}@Overridepublic void doMousePress(Point p) {// TODO Auto-generated method stubAddPoint(p);}@Overridepublic void doMouseDrag(Point p) {// TODO Auto-generated method stubAddPoint(p);}@Overridepublic void doMouseRelease(Point p) {// TODO Auto-generated method stubAddPoint(p);}}Rect.javapackage base;importimportpublic class Rect extends GrapicsElem {int x,y,width,height;@Overridepublic void draw(Graphics g) {// TODO Auto-generated method stubg.drawRect(getX(), getY(), getWidth(), getHeight());}@Overridepublic void doMousePress(Point p) {super.setStart(p);super.setEnd(p);}@Overridepublic void doMouseDrag(Point p) {super.setEnd(p);}@Overridepublic void doMouseRelease(Point p) {super.setEnd(p);}public int getX() {return Math.min(start.x, end.x);}public int getY() {return Math.min(start.y, end.y);}public int getWidth() {return Math.abs(start.x-end.x);}public int getHeight() {return Math.abs(start.y-end.y);}}Circle.javapackage base;importpublic class Circle extends Rect {@Overridepublic void draw(Graphics g) {// TODO Auto-generated method stubg.drawOval(getX(), getY(), getWidth(), getHeight());}}windowsPaint.javapackage winpaint;import base.Circle;import base.GrapicsElem;import base.Line;import base.Rect;public class windowsPaint extends JPanelimplements MouseListener, MouseMotionListener {String command = "矩形";List<GrapicsElem> Lg = new ArrayList() ;GrapicsElem cur;JLabel label;public windowsPaint(String title){init();}private void init() {addMouseListener(this);addMouseMotionListener(this);}/*** 可以使用反射去掉判断语句、* Class<?> g = Class.forName("base.Rect");* g.newInstance();* @return*/private GrapicsElem newInstance(){command = mand;if(command.equals("矩形")){return new Rect();}else if(command.equals("圆形")){return new Circle();}else if(command.equals("线")){return new Line();}return null;}@Overridepublic void paint(Graphics g) {// TODO Auto-generated method stubsuper.paint(g);Graphics2D g2d = (Graphics2D) g;//g2d.setColor(cur.getColor());g2d.setStroke(new BasicStroke(10.0f));for (int i = 0; i < Lg.size(); i++) {GrapicsElem ge = Lg.get(i);ge.draw(g);}}// @Override// public void repaint() {// // TODO Auto-generated method stub// // TODO Auto-generated method stub// //// super.repaint();//// Thread thread = new Thread(new Runnable() {//// @Override//// public void run() {//// // TODO Auto-generated method stub//// try {//// SaveToFile();//// } catch (IOException e) {//// // TODO Auto-generated catch block//// e.printStackTrace();//// }//// }//// });//// thread.start();//////// ImageIcon bg = new ImageIcon("tmp.jpg");//// if(bg!=null){//// if(label!=null)//// this.remove(label);//// label = new JLabel(bg);//// label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight());//// this.add(label);//// super.repaint();//// }////// }private void SaveToFile() throws IOException {// TODO Auto-generated method stubBufferedImage bimg = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_3BYTE_BGR);Graphics2D g2d = bimg.createGraphics();this.paint(g2d);ImageIO.write(bimg, "jpg", new File("tmp.jpg"));}@Overridepublic void mousePressed(MouseEvent e) {Point p = new Point(e.getX(),e.getY());cur = newInstance();cur.doMousePress(p);Lg.add(cur);}@Overridepublic void mouseDragged(MouseEvent e) {Point p = new Point(e.getX(),e.getY());cur.doMouseDrag(p);repaint();}@Overridepublic void mouseReleased(MouseEvent e) {Point p = new Point(e.getX(),e.getY());cur.doMouseRelease(p);repaint();}@Overridepublic void mouseMoved(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}}WinToolBar.javapackage winpaint;public class WinToolBar extends JToolBar implements ActionListener{ public static String Command = "矩形";JButton btn1,btn2,btn3;//windowsPaint winp;public WinToolBar(windowsPaint winP ){btn1 = new JButton("矩形");btn2 = new JButton("圆形");btn3 = new JButton("线");this.add(btn1);this.add(btn2);this.add(btn3);btn1.addActionListener((ActionListener)this);btn2.addActionListener((ActionListener)this);btn3.addActionListener((ActionListener)this);// this.winp =winP;JComboBox com = new JComboBox();com.addItem("红色");com.addItem("蓝色");com.addItem("黑色");com.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {// TODO Auto-generated method stub}});this.add(com);}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton btn = (JButton) e.getSource();btn.setBackground(Color.green);Command = btn.getActionCommand();}}三、实验结果。