Java实现画图板方法详解

2022-06-19 12:16:38

运行后可以效果如下:
在这里插入图片描述功能:

 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);}}

想要全部代码可以关注我发你哦!!

  • 作者:工藤学编程
  • 原文链接:https://blog.csdn.net/chandfy/article/details/124221441
    更新时间:2022-06-19 12:16:38