运行后可以效果如下:
功能:
1.可进行三角形,圆形的相应图形进行绘制
2.可设置绘制图形的颜色
3.可显示当前绘制图形的周长,面积等信息
4.将绘制好的图片保存到本地
进行相应画图截图:
用到的知识:
1.反射解耦
2.接口多态
3.继承封装
4.其他Java基础知识
部分代码:
publicclassPaintApp{publicstaticvoidmain(String[] args){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(ClassNotFoundException|InstantiationException|IllegalAccessException|UnsupportedLookAndFeelException e){
e.printStackTrace();}JFrame frame=newJFrame("画图板");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(newBorderLayout());MyCanvas canvas=newMyCanvas();
canvas.setBackground(Color.white);
frame.add(canvas,BorderLayout.CENTER);JMenuBar menuBar=newJMenuBar();JButton rectBtn=newJButton(newImageIcon("D:\\java\\Exp_PaintBord_chenhao\\resource\\rect.png"));
rectBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){
canvas.setFigType("rectangle");}});
menuBar.add(rectBtn);JButton lineBtn=newJButton(newImageIcon("D:\\java\\Exp_PaintBord_chenhao\\resource\\line.png"));
lineBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){
canvas.setFigType("line");}});
menuBar.add(lineBtn);JButton ellipseBtn=newJButton(newImageIcon("D:\\java\\Exp_PaintBord_chenhao\\resource\\ellipse.png"));
ellipseBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){
canvas.setFigType("ellipse");}});
menuBar.add(ellipseBtn);JButton eqTriangleBtn=newJButton(newImageIcon("D:\\java\\Exp_PaintBord_chenhao\\resource\\eqTriangle.png"));
eqTriangleBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){
canvas.setFigType("eqTriangle");}});
menuBar.add(eqTriangleBtn);JButton rightTriangleBtn=newJButton(newImageIcon("D:\\java\\Exp_PaintBord_chenhao\\resource\\rightTriangle.png"));
rightTriangleBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){
canvas.setFigType("rightTriangle");}});
menuBar.add(rightTriangleBtn);JButton colorBtn=newJButton("■");
colorBtn.setForeground(Color.black);
colorBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){Color color=JColorChooser.showDialog(frame,"绘制颜色", colorBtn.getForeground());
colorBtn.setForeground(color);
canvas.setColor(color);}});
menuBar.add(colorBtn);JButton saveBtn=newJButton("保存");
saveBtn.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){JFileChooser chooser=newJFileChooser();if(chooser.showSaveDialog(frame)==JFileChooser.APPROVE_OPTION){File file= chooser.getSelectedFile();try{
canvas.savePic(file);}catch(IOException e1){// TODO Auto-generated catch block
e1.printStackTrace();}};}});
menuBar.add(saveBtn);
frame.add(menuBar,BorderLayout.NORTH);
frame.setVisible(true);}}
```javapublicclassMyCanvasextendsCanvas{staticProperties config;static{try{
config=newProperties();
config.load(MyCanvas.class.getResourceAsStream("config.properties"));}catch(IOException e){
e.printStackTrace();}}privateFigure figure;privateString figType="line";privateColor color=Color.black;List<Figure> figures=newArrayList<>();publicvoidsetColor(Color color){this.color= color;}publicvoidsetFigType(String figType){this.figType= figType;}MouseAdapter adapter=newMouseAdapter(){@OverridepublicvoidmousePressed(MouseEvent e){try{Class clz=Class.forName(config.getProperty(figType));Constructor constructor= clz.getConstructor();
figure=(Figure)constructor.newInstance();}catch(ClassNotFoundException|NoSuchMethodException|SecurityException|InstantiationException|IllegalAccessException|IllegalArgumentException|InvocationTargetException e1){
e1.printStackTrace();}
figure.setColor(color);
figure.setStart(e.getPoint());}@OverridepublicvoidmouseReleased(MouseEvent e){
figures.add(figure);}@OverridepublicvoidmouseDragged(MouseEvent e){
figure.setEnd(e.getPoint());MyCanvas.this.repaint();}};publicMyCanvas(){this.addMouseListener(adapter);this.addMouseMotionListener(adapter);}@Overridepublicvoidpaint(Graphics g){super.paint(g);
g.setColor(Color.white);
g.fillRect(0,0,getWidth(),getHeight());for(Figure figure: figures){
figure.draw(g);}if(figure!=null){
figure.draw(g);Point strat= figure.getStart();Point end= figure.getEnd();StringBuilder sb=newStringBuilder();
sb.append("起点:("+strat.x+","+strat.y+")");
sb.append("|终点:("+end.x+","+end.y+")");if(figureinstanceofLengthable){Lengthable lengthable=(Lengthable)figure;
sb.append("|长度:"+lengthable.length());}if(figureinstanceofAreable){Areable area=(Areable)figure;
sb.append("|面积:"+area.area());}if(figureinstanceofPerimeterable){Perimeterable pe=(Perimeterable)figure;
sb.append("|周长:"+pe.perimeter());}
g.drawString(sb.toString(),20,getHeight()-20);}}publicvoidsavePic(File file)throwsIOException{BufferedImage image=newBufferedImage(this.getWidth(),this.getHeight(),BufferedImage.TYPE_INT_BGR);Graphics g= image.createGraphics();this.paint(g);
g.dispose();//File file = new File(pathName);if(!file.exists()){
file.createNewFile();}ImageIO.write(image,"jpg", file);}}
想要全部代码可以关注我发你哦!!