Java实现简单的绘图软件

合集下载

javadrawimage的用法

javadrawimage的用法

javadrawimage的用法javadrawimage是Java中用于绘制图像的一个方法。

它可以用于在Java应用程序中绘制图像,以及在GUI中显示图像。

javadrawimage的用法非常简单,只需要使用Graphics对象的drawImage()方法即可。

drawImage()方法接受三个参数:要绘制的图像对象、x坐标和y坐标。

例如,以下代码片段演示了如何使用javadrawimage方法将图像绘制在Java应用程序中:```import java.awt.Graphics;import java.awt.Image;import javax.swing.JFrame;import javax.swing.JPanel;public class DrawImage extends JPanel {private Image image;public DrawImage() {image =Toolkit.getDefaultToolkit().getImage('image.png');}public void paint(Graphics g) {g.drawImage(image, 0, 0, this);}public static void main(String[] args) {JFrame frame = new JFrame('Draw Image');frame.getContentPane().add(new DrawImage());frame.setSize(300, 300);frame.setVisible(true);}}```在上面的代码中,我们创建了一个继承自JPanel的类DrawImage,并覆盖了paint()方法,在其中调用了Graphics对象的drawImage()方法。

在main()方法中,我们创建了一个JFrame对象,并将DrawImage 对象添加到其中。

推荐两款程序员必备的画图神器

推荐两款程序员必备的画图神器

推荐两款程序员必备的画图神器算了,还是强调下吧:1、程序员不要认为写好代码就好,画好图也很重要,难道你没听过PPT架构师,PPT架构师不就天天画图么第一点就是皮一下,早日成为架构师,在也不想写代码了2、关于画画,俗话说有图有真相!哦,不,一张照片胜过千言万语。

一张图胜过千言万语,传播效率不仅仅是这很重要,不!这非常非常重要如果你在工作中没有画过画,或者没有找到合适的画图工具,看完这篇文章,建议你试着从其中一个开始你的画图表现。

是一个非常有用的自由流程图绘制工具。

你可以利用它绘制一系列的图表、图示或图形,包括流程图、UML 类图、组织结构图、泳道图、E-R 图、文氏图等等,适用于商务、工程、电气、网络设计、软件设计等诸多领域的专业绘图。

它致力于成为完全开源、免费、并且高质量的绘图软件。

软件内置了相当丰富的绘图资源,包括各类形状、图标、连接器、模板,能满足绝大大多数的绘图需求,还可以导入第三方图标资源满足更多需求,完全可以取代微软 Visio 等流程图软件。

很多介绍,感觉很高端,其实我真的用的就那么几个。

这个软件可以在线访问画图,下载安装包(绿色版)在本地打开画图也很方便。

默认版本是英语。

如果英文和我的一样,它也选择中文,可以切换,更人性化。

截几个图看看吧:“ 如果打开后是英文的话,在语言选择中文然后重新打开软件即是中文版举一个简单的流程图例子的截图。

你还不快去探索其他的用法,那你还等什么?这个画图工具也提供了window便携版,双击就可以打开使用,无需网络。

下载地址也给你安排的妥妥当当,还不给我点个赞,鼓励一下么~下载说明,最新版本v12.9.3:github下载地址:考虑到github访问有时候比较慢,还提供了蓝奏云下载蓝奏云下载Draw:ProcessOn是一个面向垂直专业领域的作图工具和社交网络,提供基于云服务的免费流程梳理,可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等,您无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作。

Java的Graphics类进行绘图的方法详解

Java的Graphics类进行绘图的方法详解

Java的Graphics类进⾏绘图的⽅法详解Graphics类提供基本绘图⽅法,Graphics2D类提供更强⼤的绘图能⼒。

Graphics类提供基本的⼏何图形绘制⽅法,主要有:画线段、画矩形、画圆、画带颜⾊的图形、画椭圆、画圆弧、画多边形等。

1. 画线在窗⼝画⼀条线段,可以使⽤Graphics类的drawLine()⽅法:drawLine(int x1,int y1,int x2,int y2) 例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,100)处画⼀个点。

g.drawLine(3,3,50,50);//画⼀条线段g.drawLine(100,100,100,100);//画⼀个点。

2. 画矩形有两种矩形:普通型和圆⾓型。

(1) 画普通矩形有两个⽅法:drawRect(int x,int y,int width,int height):画线框围起来的矩形。

其中参数x和y指定左上⾓的位置,参数width和height是矩形的宽和⾼。

fillRect(int x,int y,int width,int height):是⽤预定的颜⾊填充⼀个矩形,得到⼀个着⾊的矩形块。

以下代码是画矩形的例⼦:g.drawRect(80,100,40,25);//画线框g.setColor(Color.yellow);g.fillRect(20,70,20,30);//画着⾊块(2)画圆⾓矩形也有两个⽅法:drawRoundRect(int x,int y,int width, int height, int arcWidth, int arcHeight):是⽤线围起来的圆⾓矩形。

其中参数x和y指定矩形左上⾓的位置;参数width和heigth是矩形的宽和⾼;arcWidth和arcHeight分别是圆⾓弧的横向直径和圆⾓弧的纵向直径。

fillRoundRect(int x,int y,int width,int height,int arcWidth,int archeight):是⽤预定的颜⾊填充的圆⾓矩形。

java createdrawingpatriarch 使用实例

java createdrawingpatriarch 使用实例

java createdrawingpatriarch 使用实例Java中的createdrawingpatriarch方法用于创建Sheet的绘图管理器,可以对Sheet进行绘图操作。

绘图管理器中可以添加图形、绘制文本、设置填充颜色等,非常灵活实用。

本文将一步一步回答“java createdrawingpatriarch 使用实例”。

第一步:了解createdrawingpatriarch方法的基本用法在开始实例之前,我们需要了解createdrawingpatriarch方法的基本用法。

该方法是在Workbook接口中定义的,用于在Sheet中创建一个绘图管理器。

绘图管理器可以通过getCreationHelper().createDrawingPatriarch()方法来获取。

接下来的实例中,我们将使用POI库来操作Excel文件,具体使用步骤如下:1. 创建一个Workbook对象:Workbook workbook = new XSSFWorkbook();2. 创建一个Sheet对象:Sheet sheet = workbook.createSheet("Sheet1");3. 获取绘图管理器对象:Drawing drawing = sheet.createDrawingPatriarch();第二步:创建简单的图形下面我们来创建一个简单的图形,以便更好地理解createdrawingpatriarch方法的使用。

我们将创建一个圆形,并设置其位置和大小,代码如下:1. 创建一个绘图对象:XSSFDrawing drawing = (XSSFDrawing)sheet.createDrawingPatriarch();2. 定义圆形的位置和大小:int x = 100; 圆心的横坐标int y = 100; 圆心的纵坐标int width = 100; 圆的宽度int height = 100; 圆的高度3. 绘制圆形:XSSFClientAnchor anchor = drawing.createAnchor(x, y, x + width, y + height, 0, 0, 0, 0);XSSFSimpleShape circle = drawing.createSimpleShape(anchor); circle.setShapeType(ShapeTypes.ELLIPSE);第三步:绘制文本除了图形,我们还可以在Sheet中绘制文本。

graphics 方法

graphics 方法

graphics 方法
Graphics 方法是 Java 中的一个绘图 API,它允许开发者使用图形字符、线条、图像等来绘制文本、图像等。

Java 中的 Graphics 方法主要源于 JavaFX 和 Java Swing,这两个框架都使用了 Graphics 方法来实现图形绘制功能。

JavaFX 是一个基于 Java 的跨平台桌面应用程序框架,它提供了丰富的图形和用户界面组件,这些组件包括按钮、文本框、标签、进度条、图片等等。

JavaFX 使用 Graphics 方法来绘制这些组件。

开发者可以使用 Graphics 对象的drawXXX 方法来绘制各种图形。

例如,使用 drawString 方法可以绘制文本。

drawString 方法接收三个参数:x 坐标、y 坐标和要绘制的字符串。

x 和 y 坐标是相对于屏幕的偏移量,字符串是绘制在屏幕上的。

Java Swing 是 Java 的一个用户界面组件库,它提供了许多用于绘制图形的组件,包括 JLabel、JButton、JPanel 等等。

Java Swing 使用 Graphics 方法来绘制这些组件。

Graphics 方法还可以用来绘制图像。

例如,可以使用 drawImage 方法将另一个图像加载到屏幕上。

drawImage 方法接收三个参数:要加载的图像、x 坐标、y 坐标和图像的宽高比。

总结起来,Graphics 方法是 Java 中用于绘制图形的重要 API,它提供了许多用于绘制文本、图像、线条等的方法,可以用于创建高质量的图形用户界面。

java createdrawingpatriarch 使用实例 -回复

java createdrawingpatriarch 使用实例 -回复

java createdrawingpatriarch 使用实例-回复Java中的createdrawingpatriarch方法是在Apache POI库中使用的一种方法,它用于创建Patriarch对象,该对象用于在Excel文档中添加绘图层。

通过创建Patriarch对象,我们可以在工作表中添加图形、形状、图片和文本框等。

本文将详细介绍java createdrawingpatriarch方法的使用实例,通过一步一步地回答以下问题:1. 什么是Apache POI库?2. 什么是Patriarch对象?3. 如何使用createdrawingpatriarch方法创建Patriarch对象?4. 怎样在已有的Excel文档中添加绘图层?1. 什么是Apache POI库?Apache POI是一种用于操作Microsoft Office文件的开源Java库。

它提供了一组API,可让我们从Java代码中读取、创建和修改Excel、Word 和PowerPoint等Office文档。

通过Apache POI库,我们可以实现对Excel文档的批处理操作,如数据的读取、写入以及对样式、图表等的编辑。

2. 什么是Patriarch对象?Patriarch对象在Apache POI库中是用于管理绘图层的对象。

绘图层允许在Excel文档的工作表中添加各种图形元素,如形状、图片和文本框等。

Patriarch对象充当了绘图层的容器,我们可以通过Patriarch对象的方法来添加、删除和修改绘图层中的对象。

3. 如何使用createdrawingpatriarch方法创建Patriarch对象?在使用Apache POI库创建Patriarch对象之前,我们需要先创建一个工作表对象,然后通过该工作表对象的createDrawingPatriarch()方法来创建Patriarch对象。

下面是一个使用实例:import ermodel.*;public class CreateDrawingExample {public static void main(String[] args) {创建工作簿和工作表对象Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet("Sheet1");创建Patriarch对象Drawing<?> drawing = sheet.createDrawingPatriarch();执行绘图操作...保存工作簿try {FileOutputStream fileOut = new FileOutputStream("sample.xlsx");workbook.write(fileOut);fileOut.close();} catch (IOException e) {e.printStackTrace();}}}在上面的代码中,我们首先创建了一个XSSFWorkbook对象作为工作簿,然后使用createSheet()方法创建了一个名为"Sheet1"的工作表。

javapaint方法

javapaint方法

javapaint方法在Java中,可以使用paint方法来实现对组件进行绘制的功能。

paint方法是Swing组件中的一个方法,用于进行组件的绘制操作。

下面将详细介绍Java的paint方法。

首先,paint方法是在组件需要被重绘时由Java虚拟机自动调用的,应用程序通常无需自己调用paint方法。

在组件首次显示时或需要进行重绘时,paint方法将自动被调用。

paint方法的方法签名如下:```public void paint(Graphics g)```paint方法的参数是一个Graphics对象,它提供了一系列的绘图方法用于完成绘制操作。

在paint方法中,通常需要完成以下几个步骤:1. 获取Graphics对象:用于绘制的Graphics对象可以通过paint方法的参数获取,此时可以使用Graphics对象的各种方法来完成绘制操作。

2. 设置绘图属性:在开始绘制之前,通常需要设置一些绘画属性,比如绘图颜色、线条粗细等。

Graphics对象提供了一系列用于设置绘画属性的方法,比如setColor、setStroke等。

3. 进行绘制操作:在绘制之前,需要确定绘制的内容和位置。

根据需要,可以使用Graphics对象的各种绘图方法,如drawLine、drawRect、fillRect等来绘制需要的图形。

4. 释放资源:绘制操作完成后,通常需要释放绘图资源,以便其他组件或画布进行绘制操作。

可以通过Graphics对象的dispose方法来释放绘图资源。

下面是一个简单的示例代码,展示了如何在一个JPanel类中使用paint方法进行绘制操作:```javaimport javax.swing.*;import java.awt.*;public class MyPanel extends JPanelpublic void paint(Graphics g)super.paint(g);//设置绘图属性g.setColor(Color.RED);//绘制操作g.drawLine(10, 10, 100, 100);g.drawRect(50, 50, 100, 100);g.fillRect(200, 200, 100, 100);//释放资源g.dispose(;}```在上面的代码中,首先继承了JPanel类,并重写了其paint方法。

java xyplot用法

java xyplot用法

java xyplot用法Java XYPlot是JFreeChart图表库中的一个重要组件,用于创建XY 坐标系图表。

在Java应用程序中,通过使用XYPlot可以实现各种各样的XY坐标系图表,如折线图、散点图、面积图等。

本文将介绍Java XYPlot的基本用法,包括创建XYPlot对象、设置坐标轴、添加数据集等操作。

1. 创建XYPlot对象要使用Java XYPlot,首先需要创建一个XYPlot对象并将其添加到JFreeChart图表中。

以下是创建XYPlot对象的基本代码示例:```javaXYPlot plot = new XYPlot();```2. 设置坐标轴在创建XYPlot对象后,需要设置XY坐标系的坐标轴,包括X轴和Y轴。

可以设置坐标轴的标题、颜色、刻度、刻度标签等属性。

以下是设置X轴和Y轴的示例代码:```javaplot.setDomainAxis(new NumberAxis("X轴"));plot.setRangeAxis(new NumberAxis("Y轴"));```3. 添加数据集在设置坐标轴后,需要向XYPlot中添加数据集,以便在图表中显示数据。

可以通过创建XYSeries对象并向其中添加数据点来实现。

以下是添加数据集的示例代码:```javaXYSeries series = new XYSeries("数据集");series.add(1.0, 1.0);series.add(2.0, 2.0);series.add(3.0, 3.0);XYDataset dataset = new XYSeriesCollection(series);plot.setDataset(dataset);```4. 设置图表样式除了设置坐标轴和添加数据集之外,还可以设置XYPlot的样式,如背景色、边框、线条颜色等。

plantuml maven java代码实现

plantuml maven java代码实现

一、概述在软件开发过程中,Maven是一个用于构建和管理项目的强大工具,而PlantUML是一个用于绘制UML图形的工具,本文将介绍如何使用Maven和Java代码实现PlantUML。

二、Maven简介1. Maven是一个项目管理工具,它可以帮助开发人员自动化构建过程,管理项目依赖关系,并提供了一种结构化的项目管理方式。

2. Maven使用一套标准的项目对象模型(Project Object Model,POM)来管理项目的构建和依赖关系,通过配置POM文件,开发者可以轻松地管理项目的各种依赖关系和构建过程。

3. Maven有着丰富的插件生态系统,可以满足开发过程中的各种需求,例如编译、打包、部署等。

三、PlantUML简介1. PlantUML是一个开源工具,它使用简单的文本描述语言来绘制UML图形,支持多种类型的UML图,在软件开发过程中被广泛应用于需求分析、架构设计等领域。

2. PlantUML提供了丰富的文本描述语言,可以描述类图、时序图、用例图等多种类型的UML图,开发者可以通过简单的文本描述来绘制出复杂的UML图形。

3. PlantUML支持多种输出格式,包括PNG、SVG等,可以方便地嵌入到文档中或者直接发布到网页上。

四、使用Maven和Java代码实现PlantUML1. 配置Maven项目首先需要创建一个新的Maven项目,可以使用Maven提供的archetype快速创建一个Java项目的骨架。

在POM文件中添加PlantUML的依赖,Maven将自动下载并管理PlantUML所需的相关库文件。

2. 编写Java代码在Maven项目中创建一个Java类,通过编写Java代码来描述UML 图形。

可以使用PlantUML提供的API来创建和配置UML图形,例如创建类图、时序图等。

3. 生成UML图形使用PlantUML提供的工具类,将Java代码描述的UML图形转换为PNG、SVG等格式的图形文件。

基于Java的简易几何画板的实现

基于Java的简易几何画板的实现
da ie ( t l it l n 2 ity) 从 坐 标 (l 1 rwLn i ,n ,it ,n 2 nx y x x , )到 (2y )绘 制 直 线 y x, 2 da e t(it ,it , it dh n 制 一 个 矩 形 ,该 矩 形 的 左 上 角 坐 标 是 rwR c n x n Y n wit,it 绘
; ot{ aui r y i ; mp r j . I r L t v t. a s a A
mp r j auitrt o v . } eao t a tI l
主 界 面 由 两个 J ae 组 成 ,分 别 为 工 具 箱 和 画板 两 部 分 。 P nl


p bi ls a n o r u l ca s DrwigB ad{ c
果 。 具 体 实 现 如下 :
p k g rw n b ad: I c tj aa . a h s D; mp r a wt p i 2 v Gr c
i p tjv w t ma e m or a a a . 1 g1

i otj aa .on; mp r a . P i v wt t
P p ; = o
p b c sai e u Pc y e / 图 类 型 u l tt n m i p ( ̄ i c T /
¨ e / 线 n ,直 /
c re∥ uv , 曲线
) Drw ig o r P da I a e( a ig a d M yma e a n B ad.G.rw m g Drw n B0 r . l g ,

. .
p bi sai A ry i < on> P i L t/ 录绘 图的 点 集 u l tt r Ls P i c c a t t on i I记 t s/

java教程之Java绘图

java教程之Java绘图

(4) fillRoundRect() 调 用 格 式 为 : fillRoundRect(int x,int y,int width,int height,int arcW,int arcH) 方法作用:以(x,y)为矩形的左上角顶点,绘制一 个宽、高分别为width和height可有填充色的圆角 矩形。 方法中的参数解释如下:x,y——所绘矩形左上角坐 标 。 Width,height — — 所 绘 矩 形 的 宽 和 高 。 arcW,arcH分别为所绘矩形圆角的宽和高。 与drawRoundRect()的区别:该方法所绘制的圆角矩 形中可有填充色。 该方法的使用举例如下:
例9.10 import java.applet.*; import java.awt.*; public class Draw_arc extends Applet { public void paint(Graphics g) { g.setColor(Color.red); g.fillArc(0,40,100,100,0,180); g.fillArc(300,40,30,100,0,360); g.fillArc(200,100,50,50,0,270); } }
(2)、fillArc() 调 用 格 式 : fillArc(int x,int y,int width,int height,int anglestart,int angleend) 作用:绘制一段着色圆弧(扇形)。 参数解释:x,y——该圆弧外接矩形的左上角 坐标。Width,height——该圆弧外接矩形 的宽和高。Anglestart,angleend——该 圆弧的起始角和终止角,单位为“度”。 “0”(零)度角为x轴的正方向。正的角 度按逆时针方向旋转;负的角度按顺时针 方向旋转。 该方法举例如下:

值得苦练的55个java小项目

值得苦练的55个java小项目

值得苦练的55个java小项目在这个数字化时代,掌握一门编程语言对于个人发展和职业规划至关重要。

而在众多编程语言中,Java是一门广泛使用的编程语言,尤其在企业级应用开发中应用广泛。

为了帮助初学者提升自己的Java编程能力,以下是值得苦练的55个Java小项目。

1.计算器:创建一个简单的图形用户界面(GUI)来模拟一个计算器,并实现基本的加、减、乘、除功能。

2.猜数游戏:编写一个程序,在一定范围内生成一个随机数,然后用户通过输入猜测数字,程序逐步给出用户的猜测是否正确。

3.五子棋游戏:实现一个供两人玩的五子棋游戏,包括游戏规则、棋盘、计分等功能。

4.银行管理系统:设计和实现一个基本的银行管理系统,包括账户创建、存款、取款、转账等功能。

5.图书管理系统:创建一个图书管理系统,包括图书的添加、删除、借出和归还等功能。

6.学生成绩管理系统:创建一个学生成绩管理系统,包括学生信息录入、查询、修改和删除等功能。

7.聊天室应用:使用Socket编程创建一个简单的聊天室应用,允许多个用户之间进行实时通信。

8.网页爬虫:编写一个程序以网络爬虫的方式访问网页并提取所需的信息。

9.文件压缩器:创建一个程序,能够将多个文件压缩为一个压缩文件,并能够解压缩已压缩的文件。

10.文件比较器:编写一个程序,用于比较两个文件的内容,以确定它们是否相同或相似。

11.数据库连接应用:使用Java JDBC连接到数据库,并实现增加、删除和修改数据的功能。

12.日历应用:开发一个简单的日历应用,可以显示当前日期、添加事件和提醒等功能。

13.地址簿应用:创建一个能够存储联系人信息的地址簿应用,包括添加、查找、编辑和删除联系人等功能。

14.天气应用:使用天气API获取实时天气信息,并显示在一个简单的用户界面中。

15.网络速度测试应用:开发一个简单的应用程序,用于测试用户的网络速度。

16.电子邮件客户端:编写一个程序,用于发送和接收电子邮件。

深入浅出java swing程序设计-概述说明以及解释

深入浅出java swing程序设计-概述说明以及解释

深入浅出java swing程序设计-概述说明以及解释1.引言1.1 概述Java Swing是一种用于构建图形用户界面(Graphical User Interface,简称GUI)的Java库。

它为开发人员提供了丰富的组件和布局管理器,可以轻松创建具有各种功能和样式的交互式应用程序。

Java Swing的出现填补了Java原生GUI工具包的不足,为开发人员提供了更多的自定义和灵活性。

与AWT(Abstract Window Toolkit)相比,Swing提供了更多的组件和界面控件,同时具备更好的跨平台性。

Java Swing不仅仅是一个图形用户界面库,它还提供了一整套用于处理用户输入、图形绘制、多媒体展示等功能的类和工具。

开发人员可以利用这些工具快速构建具有丰富交互性的应用程序。

本文将深入浅出地介绍Java Swing程序设计的基本概念和技巧。

我们将从Swing的组件和布局开始,逐步展示如何创建简单且功能强大的用户界面。

通过学习本文,读者将能够掌握Java Swing的核心知识,并能够利用这些知识开发出符合自己需求的应用程序。

本文的目的是帮助读者快速上手Java Swing,了解其基本概念和使用方法。

同时,我们也将展望Java Swing的未来发展,探讨其在现代应用程序开发中的重要性和应用前景。

在接下来的正文部分,我们将详细介绍Java Swing的基本概念,包括组件、事件、布局等内容。

同时,我们还将给出一些实际的例子,以便读者更好地理解和应用所学知识。

总之,本文将从大纲所列的各个方面对Java Swing进行深入浅出的探讨,旨在帮助读者全面了解和掌握Java Swing程序设计的基本技巧和应用方法。

希望读者能够通过本文的学习,具备自主开发Java Swing应用程序的能力,并能在实际项目中灵活应用所学知识。

1.2 文章结构本文主要以深入浅出的方式介绍Java Swing程序设计。

文章分为引言、正文和结论三个部分,每个部分有相应的小节。

JAVA简单画板程序设计实验报告

JAVA简单画板程序设计实验报告

J A V A简单画板程序设计实验报告As a person, we must have independent thoughts and personality.JAVA期末画板实验报告课程题目:运用JAVA语言编写一个画板程序,这个画板要有画图,特殊图形绘制,颜色改变,画笔大小改变等功能。

设计思想:1.进行界面设计2.进行算法实现3.运行调试4.总结问题设计过程:A.界面设计B.新建一个Jframe容器,然后定义一个panel( Panel convas2),convas2是工具栏。

用borderlayout布置容器的边框布局,将工具栏放在NORTH部分。

完成界面设计。

add(canvas2,;Panel canvas2 = new Panel();添加工具按键Panel canvas2 = new Panel();Button btn1 = new Button("直线");Button btn2 = new Button("椭圆");Button btn3 = new Button("矩形");Button btn4 = new Button("清除");Button btn5 = new Button("画笔");Button btn6 = new Button("橡皮");Choice choice = new Choice();Choice choice1 = new Choice();(choice);(choice1);(btn1);(btn2);(btn3);(btn4);(btn5);(btn6);在工具表中,有两个下拉菜单,分别收录画笔的大小和颜色。

1.画笔的大小:("1");("3");("5");("7");("9");2.画笔颜色("黑色");("蓝色");("红色");("黄色");("绿色");3展示画板C.算法实现运用画板,首先要对工具栏按键和鼠标进行监听,然后对监听进行响应。

JFreeChart使用教程(含下载、安装)之欧阳地创编

JFreeChart使用教程(含下载、安装)之欧阳地创编

用JFreeChart增强JSP报表的JFreeChart是一组功能强大、灵活易用的Java绘图AP I,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。

它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。

本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。

一.下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。

其下载地址为:http://source /project/showfiles.php?group_id=15494,当前最新版本为1.0.6。

笔者下载的是1.0.6最新版。

说明:1)source目录:为jfreechart的源码目录;2)lib目录:为包目录,我们需要关注的包为jfreec hart-1.0.6.jar、gnujaxp.jar和jcommon-1.0.10.jar 这三个包;3)根目录下的jfreechart-1.0.6-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。

2. 环境配置笔者的开发环境如下:JDK:1.5MyEclipse:5.1.1 GATomcat:5.5.28为了后续的“用JFreeChart创建基于Web的图表”的一个例子的展示,我们在MyEclipse中创建一个名为j freechart的Web工程。

将下载的JFreeChart1.0.6下l ib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。

另外还需要在web.xml文件中增加如下配置:servlet servletnameDisplayChartservletname servl etclassorgjfreechartservletDisplayChartservletcla ss servlet servletmapping servletnameDisplayChartservletnameurlpatternDisplayCharturlpat tern servletmapping二.柱状图在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。

java的surface view的用法

java的surface view的用法

很高兴能为您撰写关于Java中SurfaceView的使用方法的文章。

SurfaceView是Android中的一个重要组件,它可以用来在屏幕上直接绘制图形,非常适合用于游戏开发和其他需要高效绘图的应用程序中。

1. 了解SurfaceView在开始讨论SurfaceView的用法之前,让我们先来了解一下SurfaceView是什么。

在Android中,SurfaceView是一个可以在其他线程中绘制图形的视图。

与普通的View不同,SurfaceView的绘图是在一个独立的线程中进行的,这样可以避免在主UI线程中进行复杂的绘图操作,提高了绘图的效率。

如果你需要在应用程序中进行复杂的绘图操作,使用SurfaceView是一个不错的选择。

2. SurfaceView的基本用法要在应用程序中使用SurfaceView,首先需要在XML布局文件中定义SurfaceView控件。

然后在Activity中获取SurfaceView的引用,并在其上创建一个绘图线程。

绘图线程需要实现SurfaceHolder.Callback接口,这样才能响应SurfaceView的生命周期事件,并在正确的时机进行绘图操作。

在绘图线程中,可以通过SurfaceHolder对象获取Canvas对象,然后使用Canvas来进行绘图操作。

3. SurfaceView的高级用法除了基本的绘图操作之外,SurfaceView还提供了一些高级的功能,比如双缓冲、透明度设置、表面大小的调整等。

双缓冲可以有效地避免绘图过程中出现的闪烁现象,提高绘图的平滑度。

透明度设置可以让绘制的图形具有半透明的效果,增加视觉效果。

表面大小的调整可以让SurfaceView适应不同的屏幕尺寸和分辨率,提高应用程序的可适配性。

4. 个人观点和总结在我看来,SurfaceView是一个非常有用的组件,特别适合用于需要高效绘图的应用程序中。

通过使用SurfaceView,开发者可以实现复杂的绘图操作,提高应用程序的用户体验。

JAVA实验报告总结计划——简单绘图程序

JAVA实验报告总结计划——简单绘图程序

实验三绘制图形一、实验目的学会JButton 的使用,能进行JButton 的基本操作,能使用JButton 结构一个图形界面框架经过实验熟习swing图形用户界面程序设计熟习java 中的事件办理模型,每个事件动作代表的意义进一步提升编程能力,学会独立思虑,学会上网查找资料决问题。

二、实验内容设计一个程序,该程序能够绘制基本的图形(包含圆形、矩形、直线等);要求有一个简单易操作的用户界面(包含菜单、按钮等组件)。

编写的程序要求能够实现保留和读取的功能。

三、实验代码import ;import ;import ;importimportimportimport winpaint.WinToolBar;import winpaint.windowsPaint;public class Main{/**@paramargs*/public static void main(String[]args){TODOAuto-generatedmethodstubJPanelpain tWin=newwindowsPaint("绘图");paintWin.setBounds(0,30,1000, 1000);paintWin.s etLayout(null);paintWin.s etVisible(tru);eJToolBarto ol=newWinToolBar((windowsPai nt)paintWin);tool.setBounds(0,0 ,1000,30);tool.setVi sible(true);JFramefram e=newJFram e();frame.setL ayout(null);frame.setV isible(true);frame.setBounds(0,0,1000,1000); frame.add(tool);frame.add(paintWin);}}importbase.GrapicsElem;importbase.Rect;publicclasstestfractor{/**@paramargs@throwsClassNotFoundException*/publicstaticvoidmain(String[]args)throwsClassNotFoundException{ TODOAuto-generatedmethodstubGrapicsElemGe=newRect();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(inti=0;i<suns.length;i++){}//GrapicsElemgg=(GrapicsElem)con[0].newInstance();con[0]);con[1]);con[2]);}catch(Exceptione){e.printStackTrace();}demo2=newRect().getClass();demo3=Rect.class;}}package base;importimportimportpublic abstract class GrapicsElem{Point start ;Point end;private Color color ;public ColorgetColor(){return color ;}p ubli c th is void setColor(Colorcolor){ .color =color;}publ ic th isvoid setStart(Pointstart){ .start =start;}publ ic th isvoid setEnd(Pointend){ .end=end;} publi c publ ic publ ic publ ic abstractabstractabstractabstractvoidvoidvoidvoiddoMousePress(Pointp);doMouseDrag(Pointp);doMouseRelease(Pointp);draw(Graphicsg);}package base; importimportimportpublicclassLineArrayList<Point>extendstrackGrapicsElem{;public Line(){track =newArrayList<Point>();}@Overridepublic void draw(Graphicsg){for (int i=0;i< track .size()-1;i++){Pointcur= track .get(i);Pointnext= track .get(i+1);}//}private voidAddPoint(Pointp){track .add(p);}@Overridepublic voiddoMousePress(Pointp){ TODOAuto-generatedmethodstubAddPoint (p);}@Overridepublic voiddoMouseDrag(Pointp){ TODOAuto-generatedmethodstubAddPoint (p);}//@Overridepublic voiddoMouseRelease(Pointp){TODOAuto-generatedmethodstubAddPoint(p);}}package base;importimportpublic class Rect extends GrapicsElem{int x,y,width ,height ;@Overridepublic void draw(Graphicsg){TODOAuto-generatedmethodstubg.drawRect(getX(),getY(),getWidth(),getHeight()); }@Overridepublic void doMousePress(Pointp){super.setStart(p);super.setEnd(p);}@Overridepublic void doMouseDrag(Pointp){super.setEnd(p);}@Overridepublic void doMouseRelease(Pointp){super.setEnd(p);}p ublicintgetX(){returnMath.min(start.x,end.x);}p ublicintgetY(){returnMath.min(start.y,end.y);}p ublicint getWidth(){ returnMath.abs(start.x-end.x);}p ublicint getHeight(){ returnMath.abs(start.y-end.y);}}package base;importpublic class Circle extends Rect{@Overridepublic void draw(Graphicsg){TODOAuto-generatedmethodstubg.drawOval(getX(),getY(),getWidth(),getHeight()); }}packagewinpaint;importbase.Circle;importbase.GrapicsElem;importbase.Line;importbase.Rect;publicclasswindowsPaintextendsJPanelimplementsMouseListener,MouseMotionListener{Stringcommand=" 矩形";List<GrapicsElem>Lg=newArrayList();GrapicsElemcur;JLabellabel;publicwindowsPaint(Stringtitle){init();}privatevoidinit(){addMouseListener(this);addMouseMotionListener(this);}/**能够使用反射去掉判断语句、Class<?>g=Class.forName("base.Rect");g.newInstance();@return*/privateGrapicsElemnewInstance(){command= mand;if(command.equals(" 矩形")){returnnewRect();}elseif(command.equals(" 圆形")){returnnewCircle();}elseif(command.equals(" 线")){returnnewLine();}returnnull;}//@Overridepublicvoidpaint(Graphicsg){TODOAuto-generatedmethodstubsuper.paint(g);//Graphics2Dg2d=(Graphics2D)g;//g2d.setColor(cur.getColor());g2d.setStroke(newBasicStroke(10.0f));for(inti=0;i<Lg.size();i++){GrapicsElemge=Lg.get(i);ge.draw(g);}}@Overridepublicvoidrepaint(){//TODOAuto-generatedmethodstub//// // //// //// //// //// //////TODOAuto-generatedmethodstub//super.repaint();Threadthread=newThread(newRunnable(){ @Overridepublicvoidrun(){//TODOAuto-generatedmethodstubtry{//////// //// ////SaveToFile();}catch(IOExceptione){//TODOAuto-generatedcatchblock e.printStackTrace();////}////}////thread.start();//////////// //// //// //// //// //// ////ImageIconbg=newImageIcon("tmp.jpg");if(bg!=null){if(label!=null)this.remove(label);label=newJLabel(bg);label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight()); this.add(label);super.repaint();////}//////}privatevoidSaveToFile()throwsIOException{TODOAuto-generatedmethodstubBufferedImagebimg=newBufferedImage(this.getWidth(),this.getHeight(),BufferedImage.T YPE_3BYTE_BGR);Graphics2Dg2d=bimg.createGraphics();this.paint(g2d);ImageIO.write(bimg,"jpg",newFile("tmp.jpg"));}@OverridepublicvoidmousePressed(MouseEvente){Pointp=newPoint(e.getX(),e.getY());cur=newInstance();cur.doMousePress(p);Lg.add(cur);}@OverridepublicvoidmouseDragged(MouseEvente){Pointp=newPoint(e.getX(),e.getY());cur.doMouseDrag(p);repaint();}@OverridepublicvoidmouseReleased(MouseEvente){Pointp=newPoint(e.getX(),e.getY());cur.doMouseRelease(p);repaint();}@OverridepublicvoidmouseMoved(MouseEvente){//TODOAuto-generatedmethodstub}@OverridepublicvoidmouseClicked(MouseEvente){//TODOAuto-generatedmethodstub}@OverridepublicvoidmouseEntered(MouseEvente){//TODOAuto-generatedmethodstub}@OverridepublicvoidmouseExited(MouseEvente){//TODOAuto-generatedmethodstub}}packagewinpaint;publicclassWinToolBarextendsJToolBarimplementsActionListener{publicstaticStringCo mmand="JButtonbtn1,btn2,btn3;//windowsPaintwinp; publicWinToolBar(windows PaintwinP){btn1=newJButton("矩形"); btn2=newJButton("圆形"); btn3=newJButton(" 线"); this.add(btn1);this.add(btn2);this.add(btn3);矩形";btn1.addActionListener((ActionListener)this);btn2.addActionListener((ActionListener)this);btn3.addActionListener((ActionListener)this);=winP;JComboBoxcom=newJComboBox();com.addItem("红色");com.addItem(" 蓝色");com.addItem(" 黑色");com.addItemListener(newItemListener(){@OverridepublicvoiditemStateChanged(ItemEvente){//TODOAuto-generatedmethodstub}});this.add(com);}@OverridepublicvoidactionPerformed(ActionEvente){TODOAuto-generatedmethodstubJButtonbtn=(JButton)e.getSource();btn.setBackground(Color.green);Com mand=btn.getActionCommand();}}三、实验结果。

画图Java教程

画图Java教程

1.总体分为3个类:PaintFrame:画界面及界面控件触发(2次课)PaintPanel继承Canvas:主要实现鼠标拖拽功能根据鼠标拖拽动作划线(3次课)(Canvas,直接继承自Component组件,主要用于绘图,没有控件,更原始,Panel,继承自Container容器,主要用于镶嵌在其他控件里面当面板。

)PaintingProperties:存储当前选择的颜色、粗细、形状,所以包含三个成员变量,每个成员变量都有初始值,并实现三个成员变量的set和get方法。

(1次课)2.PaintFrame的界面仅供参考,其中凹进去的panel是选择粗细的控件,如果觉得有难度的同学可以使用JRadioButton或者下拉列表JComboBox实现:左边的图形可以使用按钮实现,但是界面效果不是很好菜单使用JMenuBar实现,代码示例:JMenuBar bar = new JMenuBar();JMenu menuFile = new JMenu("文件");JMenuItem createItem = new JMenuItem("清屏");menuFile.add(createItem);使用的JPanel默认颜色比较深,可以使用如下背景色leftPanel.setBackground(new Color(210,210,210));按钮初始化代码示例:for(int i = 0; i < SHAPENUM ; i++){if(i != 1){shapeButton[i] = new JButton(new ImageIcon(".//images//"+i + "0.gif"));}else{shapeButton[i] = new JButton(new ImageIcon(".//images//"+i + "1.gif"));}shapeButton[i].setBorder(BorderFactory.createRaisedBevelBorder());shapeButton[i].setBounds(2+i%2*27, 2+i/2*27, 27, 27);leftPanel.add(shapeButton[i]);shapeButton[i].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {JButton b=(JButton) e.getSource();ImageIcon icon = (ImageIcon) b.getIcon();String iconPath = icon.getDescription();int pos = stIndexOf(".gif");String flag = iconPath.substring(pos-1,pos);int shapeNum = Integer.parseInt(iconPath.substring(stIndexOf("//")+2, pos-1));if(flag.equals("0")){b.setIcon(new ImageIcon(".//images//"+shapeNum + "1.gif"));shapeButton[lastShape].setIcon(new ImageIcon(".//images//"+lastShape+"0.gif"));……..}//if}});}颜色的实现是一个JPanel和36个JButton组成,代码示例:Panel cbPanel = new JPanel();cbPanel.setBackground(Color.black);JButton []colorJP = new JButton[36];int n = 0;for(int i = 1 ; i <= 255 ;i += 127){for(int j = 1 ; j <= 255 ;j += 127){for(int m = 1 ; m <= 255 ;m += 64){colorJP[n] = new JButton();colorJP[n].setBackground(new Color(i-1,j-1,m-1));colorJP[n].setBounds(41+n/2*17, 15+n%2*18, 15, 15);colorJP[n].setBorder(BorderFactory.createLoweredBevelBorder());colorJP[n++].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {JButton b=(JButton) e.getSource();paitingProperties.setcolor(b.getBackground());cbPanel.setBackground(b.getBackground());//获取当前的颜色并设置PaintingProperties的颜色}});//将按钮加入面板并将n++}}}上面示例中出现了颜色的触发事件,其他的触发事件如下:(1)将当前图片换为有阴影的图片,原图片设置为没有阴影的图片,获取当前的形状(使用1,2,….等表示)并设置PaintingProperties的形状;(2)选择RadioButton或者下拉列表JComboBox选择颜色后设置PaintingProperties的粗细程度。

一个简单的绘图框架

一个简单的绘图框架

⼀个简单的绘图框架在⾥提到我想要实现⼀个分形软件,晚上⽤Java写了⼀个简单的绘图框架来⽅便我实现各种分形算法,有了这个框架我就可以很容易的将实现的各种分形绘图算法集成进这个软件。

这个框架主要包含以下⼏个类:FractalMain类继承⾃JFrame,⽤于整个Frame的布局,这⾥通过⽤户选择的不同的MenuItem来执⾏不同的绘图功能,使⽤FractalPanel类提供的setPaintStype⽅法来控制调⽤不同的绘图算法;FractalPanel类继承⾃JPanel,⽤于调⽤不同的绘图算法,这⾥主要通过⽤户从FractalMain类设置过来的ShapeStyle来调⽤不同的绘图算法,绘图主要由paintComponent⽅法实现,此⽅法继承⾃JComponent,当⽤户从FractalMain选择不同的绘图算法时通过调⽤repaint⽅法实现;ShapeStyle是⼀个枚举,主要⽤于表⽰⽤户当前选择的绘图算法,通过这个枚举最终判断该调⽤那个类提供的draw⽅法;Cantor类是⼀个Cantor三分集的绘图算法实现;当前这个框架已经基本满⾜现阶段的需求,只需要向这个框架中添加各种不同的绘图算法即可,每个绘图算法以⼀个新的类的形式出现,后续需要在这个框架中加⼊分形动画,还可能会加⼊⾃⼰制作分形图案的功能。

这个框架还需要完善的功能包括:添加设置绘图颜⾊;添加设置绘图的size;增加⽤户配置⽂件保存;增加分形图案保存功能;FractalMain.javapackage com.elvalad;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class FractalMain extends JFrame implements ActionListener {private JMenuBar menuBar;private JMenu fractalMenu;private JMenuItem blankItem;private JMenuItem cantorItem;private ShapeStyle style;private FractalPanel fractalPanel = new FractalPanel();/*** FractalMain类的构造函数*/public FractalMain() {/* JFrame继承⾃awt Frame类的⽅法,设置窗体标题 */this.setTitle("Fractal");/* 设置JFrame的初始⼤⼩ */this.setSize(1000, 1000);/* 设置⽤户在此窗体上发起 "close" 时默认执⾏的操作 */this.setDefaultCloseOperation(EXIT_ON_CLOSE);/* 设置窗⼝相对于指定组件的位置,当为null时在正中央 */this.setLocationRelativeTo(null);/* 建⽴menu */this.buildMenuBar();/* 设置此窗体的菜单栏 */this.setJMenuBar(this.menuBar);/* 添加fractalPanel到JFrame中央 */this.add(this.fractalPanel, "Center");/* 继承⾃Window类,根据参数显⽰或隐藏组件 */this.setVisible(true);}/*** 创建MenuBar* MenuBar: menuBar* Menu: fractalMenu* MenuItem: blankItem* MenuItem: cantorItem*/private void buildMenuBar() {this.menuBar = new JMenuBar();this.fractalMenu = new JMenu("Fractal");this.blankItem = new JMenuItem("Blank");this.blankItem.addActionListener(this);this.cantorItem = new JMenuItem("Cantor");this.cantorItem.addActionListener(this);this.menuBar.add(this.fractalMenu);this.fractalMenu.add(this.blankItem);this.fractalMenu.add(this.cantorItem);}/*** 通过设置PaintStyle来绘制不同的图案* 清空Panel上的图案*/private void drawBlankOnPanel() {this.style = ShapeStyle.BLANK;this.fractalPanel.setPaintStype(this.style);this.repaint();}/*** 通过设置PaintStyle来绘制不同的图案* 绘制Cantor三分集*/private void drawCantorOnPanel() {this.style = ShapeStyle.CANTOR;this.fractalPanel.setPaintStype(this.style);this.repaint();}/**** @param e awt事件接⼝,⽤于判断此时是哪种事件来选择执⾏不同的⽅法*/public void actionPerformed(ActionEvent e) {if (e.getSource() == this.blankItem) {this.drawBlankOnPanel();} else if (e.getSource() == this.cantorItem) {this.drawCantorOnPanel();}}public static void main(String[] args) {new FractalMain();}}FractalPanel.javapackage com.elvalad;import javax.swing.*;import java.awt.*;/*** Created by elvalad on 2014/12/27.*/public class FractalPanel extends JPanel {private Cantor cantor = new Cantor(100, 100, 800, 100, new Color(108, 187, 219)); private ShapeStyle style;public FractalPanel() {this.style = ShapeStyle.BLANK;}public void setPaintStype(ShapeStyle s) {this.style = s;}public void paintComponent(Graphics g) {super.paintComponent(g);switch (this.style) {case CANTOR: {this.drawCantor(g);break;}case BLANK: {break;}}}private void drawCantor(Graphics g) {this.cantor.draw(g);}}ShapeStyle.javapackage com.elvalad;/*** Created by elvalad on 2014/12/27.*/public enum ShapeStyle {BLANK, CANTOR}Cantor.javapackage com.elvalad;import java.awt.*;/*** Created by elvalad on 2014/12/27.*/public class Cantor {private double x1;private double y1;private double x2;private double y2;private Color color = new Color(108, 187, 219);/*** Cantor的构造函数* @param x1 Cantor起始点的横坐标* @param y1 Cantor起始点的纵坐标* @param x2 Cantor终⽌点的横坐标* @param y2 Cantor终⽌点的纵坐标*/public Cantor(int x1, int y1, int x2, int y2, Color color) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;this.color = color;}/**** @param*/public void draw(Graphics g) {g.setColor(this.color);this.drawShape(g, this.x1, this.y1, this.x2, this.y2);}/**** @param g* @param x1* @param y1* @param x2* @param y2*/private void drawShape(Graphics g, double x1, double y1, double x2, double y2) { g.setColor(this.color);double c = 1.0;if ((x2 - x1) < c) {g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);} else {double x3 = 0;double y3 = 0;double x4 = 0;double y4 = 0;g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);x3 = x1 + (x2 - x1) / 3;y3 = y1 + 50;x4 = x2 - (x2 - x1) / 3;y4 = y2 + 50;y1 = y1 + 50;y2 = y2 + 50;drawShape(g, x1, y1, x3, y3);drawShape(g, x4, y4, x2, y2);}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目效果图:项目源代码:import java.awt.*;import java.awt.event.*;import java.awt.geom.Ellipse2D;import java.awt.geom.Line2D;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.*;import javax.swing.filechooser.FileNameExtensionFilter;/* author: 蒋冰*/public class ImageDraw {private int typeFlag = 1;private int endFlag = 1;private int strokeTemp = 1;private Color color = Color.black;private BasicStroke stroke = new BasicStroke();private float pre_x = 0;private float pre_y = 0;private float start_x = 0;private float start_y = 0;private float start_X = 0;private float start_Y = 0;private float end_x = 0;private float end_y = 0;private float width = 0;private float height = 0;private final int AREA_WIDTH = 700;private final int AREA_HEIGHT = 400;private Line2D.Float line;private Rectangle2D.Float rect;private Ellipse2D.Float ellipse;private File imageFile;BufferedImage image = new BufferedImage(AREA_WIDTH , AREA_HEIGHT , BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) image.getGraphics();private JFrame frame = new JFrame("简单手绘程序");private DrawPanel drawArea = new DrawPanel();JButton buttonShowColor = new JButton("");public void init(){g2.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);g2.setColor(Color.black);drawArea.setPreferredSize(new Dimension(AREA_WIDTH , AREA_HEIGHT));drawArea.addMouseMotionListener(new MouseMotionAdapter(){public void mouseDragged(MouseEvent e){do_mouseDragged(e);}});drawArea.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent e1){do_mousePressed(e1);}public void mouseReleased(MouseEvent e){g2.setColor(color);g2.setStroke(stroke);endFlag = typeFlag;drawArea.repaint();}public void mouseEntered(MouseEvent e){frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));}public void mouseExited(MouseEvent e){frame.setCursor(null);}});frame.add(drawArea);JMenuBar mb = new JMenuBar();JMenu menuFile = new JMenu("文件");JMenuItem menuItemSave = new JMenuItem("保存"); menuItemSave.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {do_save_actionPerformed(arg0);}});JMenuItem menuItemOpen = new JMenuItem("打开"); menuItemOpen.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {try {do_open_actionPerformed(arg0);} catch (IOException e) {// TODO 自动生成的catch 块e.printStackTrace();}}});JMenuItem menuItemExit = new JMenuItem("退出"); menuItemExit.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {System.exit(0);}});menuFile.add(menuItemSave);menuFile.add(menuItemOpen);menuFile.add(menuItemExit);mb.add(menuFile);JPanel buttonPanel = new JPanel();FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 20, 20); buttonPanel.setLayout(layout);buttonPanel.setBackground(Color.gray);JButton buttonDraw = new JButton("绘图");buttonDraw.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {typeFlag = 1;}});buttonPanel.add(buttonDraw);JButton buttonLine = new JButton("直线");buttonLine.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {typeFlag = 2;}});buttonPanel.add(buttonLine);JButton buttonRect = new JButton("矩形");buttonRect.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {typeFlag = 3;}});buttonPanel.add(buttonRect);JButton buttonEllipse = new JButton("椭圆");buttonEllipse.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {typeFlag = 4;}});buttonPanel.add(buttonEllipse);JButton buttonDrop = new JButton("清除");buttonDrop.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {typeFlag = 5;g2.setColor(Color.white);g2.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);drawArea.repaint();}});buttonPanel.add(buttonDrop);JButton buttonColorChoose = new JButton("选择颜色"); buttonColorChoose.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) {do_buttonColorChoose_actionPerformed(arg0);}});buttonPanel.add(buttonColorChoose);buttonShowColor = new JButton("");buttonPanel.add(buttonShowColor);JLabel label = new JLabel("边框:");buttonPanel.add(label);JComboBox combox = new JComboBox();for(int i=1; i<=36; i++){combox.addItem(i);}combox.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {strokeTemp = Integer.parseInt(e.getItem().toString()) ;stroke = new BasicStroke(strokeTemp);}});buttonPanel.add(combox);frame.add(buttonPanel,BorderLayout.SOUTH);frame.add(mb,BorderLayout.NORTH);frame.setBackground(Color.gray);frame.pack();frame.setVisible(true);}public static void main(String[] args){new ImageDraw().init();}class DrawPanel extends JPanel{public void paint(Graphics g){Graphics2D g2 = (Graphics2D) g;g2.clearRect(0, 0, AREA_WIDTH, AREA_HEIGHT);g2.setColor(color);g2.setStroke(stroke);g2.drawImage(image , 0 , 0 , null);if(typeFlag == 2){line = new Line2D.Float(start_x, start_y, end_x, end_y);g2.draw(line);}if(typeFlag == 3){rect = new Rectangle2D.Float(start_X, start_Y, width, height);g2.draw(rect);}if(typeFlag == 4){ellipse = new Ellipse2D.Float(start_X, start_Y, width, height);g2.draw(ellipse);}if(typeFlag == 5){g2.setColor(Color.white);g2.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);}}}private void do_save_actionPerformed(ActionEvent arg0) {// TODO 自动生成的方法存根JFileChooser chooser = new JFileChooser();chooser.setSelectedFile(new File(imageFile.getName()));int option = chooser.showSaveDialog(null);if(option == JFileChooser.APPROVE_OPTION){File file = chooser.getSelectedFile();try {ImageIO.write(image, "jpg", file);} catch (IOException e) {// TODO 自动生成的catch 块e.printStackTrace();}}}private void do_open_actionPerformed(ActionEvent arg0) throws IOException { // TODO 自动生成的方法存根JFileChooser chooser = new JFileChooser();chooser.setFileFilter(new FileNameExtensionFilter("图片文件","jpg","jpeg","jif"));chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);int option = chooser.showOpenDialog(null);if(option == JFileChooser.APPROVE_OPTION){imageFile = chooser.getSelectedFile();Image sourceImage = ImageIO.read(imageFile);g2.drawImage(sourceImage, 0, 0, sourceImage.getWidth(null), sourceImage.getHeight(null), null);drawArea.repaint();}}private void do_buttonColorChoose_actionPerformed(ActionEvent arg0) {// TODO 自动生成的方法存根JColorChooser chooser = new JColorChooser();color = chooser.showDialog(null, "请选取颜色", Color.black);buttonShowColor.setBackground(color);}private void do_mouseDragged(MouseEvent e) {end_x = e.getX();end_y = e.getY();width = Math.abs( end_x - start_x );height = Math.abs( end_y - start_y );if(end_x <= start_x && end_y <= start_y){start_X = start_x - width;start_Y = start_y - height;}if(end_x > start_x && end_y < start_y){start_Y = start_y - height;start_X = start_x;}if(end_x <= start_x && end_y >= start_y){start_Y = start_y;start_X = start_x - width;}if(end_x >= start_x && end_y >=start_y){start_Y = start_y;start_X = start_x;}if(typeFlag == 1){if (pre_x > 0 && pre_y > 0){line = new Line2D.Float(pre_x, pre_y, end_x, end_y);g2.setColor(color);g2.setStroke(stroke);g2.draw(line);}pre_x = e.getX();pre_y = e.getY();drawArea.repaint();}else{drawArea.repaint();}}private void do_mousePressed(MouseEvent e1) {// TODO 自动生成的方法存根width = 0;height = 0;start_x = end_x = pre_x = e1.getX();start_y = end_y = pre_y = e1.getY();if(endFlag == 2){g2.draw(line);}if(endFlag == 3){g2.draw(rect);}if(endFlag == 4){g2.draw(ellipse);}drawArea.repaint();}}。

相关文档
最新文档