第九章 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 对象添加到其中。

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语言描述)-李春葆-清华大学出版社

第九章-数据结构教程(Java语言描述)-李春葆-清华大学出版社

描述
使用其它模块的核心非图形类
图形用户界面(GUI)组件的基础类,包括OpenGL
处理音频、视频、广播、摄像头功能的类
使网络编程更容易,更方便的类
QML和JavaScript的类
自定义用户界面构建高度动态的应用程序的声明性框架
使用SQL集成数据库的类
表9-1 Qt基本模块组成
进行Qt应用程序和I函数和直观的C++ 类库 (3)支持 2D/3D 图形渲染,支持 OpenGL (4)具有跨平台 IDE 的集成开发工具
(5)跨桌面和嵌入式操作系统的移植性
(6)大量的开发文档
(7)国际化
按不同的版本发行: Qt商业版:提供给商业软件开发。它们提供传 统商业软件发行版并且提供在协议有效期内的 免费升级和技术支持服务。 Qt开源版:仅仅为了开发自由和开放源码软件, 提供了和商业版本同样的功能。GNU通用公共 许可证下,它是免费的。
第9章 QT图形界面应用程序开发基础
目录
9.1 Qt简介 9.2 Qt5概述 9.3 信号和插槽机制 9.4 Qt程序设计 9.5 Qt数据库应用
与普通GUI不同的是,嵌入式GUI的要求是轻量 级的,如在嵌入式linux中使用的图形界面系统。 同时嵌入式GUI还具有可定制,高可靠性,可裁 减性等特点。嵌入式GUI的开发系统主要有X Window、MiniGUI、OpenGL、Qt等。
9.1 Part One
Qt简介
Qt是一个跨平台应用程序和图形用户界面GUI 开发框架。使用 Qt 只需一次性开发应用程序, 无须重新编写源代码,便可跨不同桌面和嵌入 式操作系统部署这些应用程序。
Qt是挪威Trolltech公司的标志性产品,于1991 年推出。2008年,Trolltech被诺基亚公司收购, QT也因此成为诺基亚旗下的编程语言工具。 2012年8月芬兰IT业务供应商Digia全面收购诺 基亚Qt业务及其技术。

《java2实用教程》(第四版)课后答案 第九章-第十三章

《java2实用教程》(第四版)课后答案 第九章-第十三章

Java作业4(第九章---第十三章)第九章3.1.1程序代码import java.awt.*;import javax.swing.event.*;import javax.swing.*;import java.awt.event.*;public class kehou31 {public static void main(String args[]) {Computer fr=new Computer();}}class Computer extends JFrame implements DocumentListener { JTextArea text1,text2;int count=1;double sum=0,aver=0;Computer() {setLayout(new FlowLayout());text1=new JTextArea(6,20);text2=new JTextArea(6,20);add(new JScrollPane(text1));add(new JScrollPane(text2));text2.setEditable(false);(text1.getDocument()).addDocumentListener(this);setSize(300,320);setVisible(true);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}public void changedUpdate(DocumentEvent e) {String s=text1.getText();String []a =s.split("[^0123456789.]+");sum=0;aver=0;for(int i=0;i<a.length;i++) {try { sum=sum+Double.parseDouble(a[i]);}catch(Exception ee) {}}count=a.length;aver=sum/count;text2.setText(null);text2.append("\n和:"+sum);text2.append("\n平均值:"+aver);}public void removeUpdate(DocumentEvent e){changedUpdate(e); }public void insertUpdate(DocumentEvent e){changedUpdate(e);}}3.1.2 运行界面3.2.1程序代码import java.awt.*;import javax.swing.event.*;import javax.swing.*;import java.awt.event.*;public class kehou932 {public static void main(String args[]) {ComputerFrame fr=new ComputerFrame();fr.setBounds(100,100,650,120);fr.setTitle("多功能计算器");fr.setBackground(Color.blue);}}class ComputerFrame extends JFrame implements ActionListener {JTextField text1,text2,text3;JButton buttonAdd,buttonSub,buttonMul,buttonDiv;JLabel label;public ComputerFrame() {setLayout(new FlowLayout());text1=new JTextField(10);text2=new JTextField(10);text3=new JTextField(10);label=new JLabel(" ",JLabel.CENTER);label.setBackground(Color.green);add(text1);add(label);add(text2);add(text3);buttonAdd=new JButton("加");buttonSub=new JButton("减");buttonMul=new JButton("乘");buttonDiv=new JButton("除");add(buttonAdd);add(buttonSub);add(buttonMul);add(buttonDiv);buttonAdd.addActionListener(this);buttonSub.addActionListener(this);buttonMul.addActionListener(this);buttonDiv.addActionListener(this);setSize(300,320);setVisible(true);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); }public void actionPerformed(ActionEvent e) {double n;if(e.getSource()==buttonAdd) {double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1+n2;text3.setText(String.valueOf(n));label.setText("+");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}else if(e.getSource()==buttonSub) {double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1-n2;text3.setText(String.valueOf(n));label.setText("-");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}else if(e.getSource()==buttonMul){double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1*n2;text3.setText(String.valueOf(n));label.setText("*");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}else if(e.getSource()==buttonDiv){double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1/n2;text3.setText(String.valueOf(n));label.setText("/");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}validate();}}3.2.2运行界面3.3.1 程序代码import java.awt.*;import java.awt.event.*;import javax.swing.*;public class kehou933 {public static void main(String args[]){Window win = new Window();win.setTitle("使用MVC结构");win.setBounds(100,100,420,260);}}class Window extends JFrame implements ActionListener { Lader lader; //模型JTextField textAbove,textBottom,textHeight; //视图 JTextArea showArea; //视图JButton controlButton; //控制器Window() {init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}void init() {lader = new Lader();textAbove = new JTextField(5);textBottom = new JTextField(5);textHeight = new JTextField(5);showArea = new JTextArea();controlButton=new JButton("计算面积");JPanel pNorth=new JPanel();pNorth.add(new JLabel("上底:"));pNorth.add(textAbove);pNorth.add(new JLabel("下底:"));pNorth.add(textBottom);pNorth.add(new JLabel("高:"));pNorth.add(textHeight);pNorth.add(controlButton);controlButton.addActionListener(this);add(pNorth,BorderLayout.NORTH);add(new JScrollPane(showArea),BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {try{double above = Double.parseDouble(textAbove.getText().trim());double bottom = Double.parseDouble(textBottom.getText().trim());double height = Double.parseDouble(textHeight.getText().trim());lader.setAbove(above) ;lader.setBottom(bottom);lader.setHeight(height);double area = lader.getArea();showArea.append(" 梯形的面积:"+area+"\n");}catch(Exception ex) {showArea.append("\n"+ex+"\n");}}}class Lader {double above,bottom,height;public double getArea() {double area = (above+bottom)*height/2.0;return area;}public void setAbove(double a) {above = a;}public void setBottom(double b) {bottom = b;}public void setHeight(double c) {height = c; }}3.3.2运行界面第十章4.1.1程序代码import java.io.*;public class E {public static void main(String args[]) {File f=new File("E.java");;try{ RandomAccessFile random=new RandomAccessFile(f,"rw");random.seek(0);long m=random.length();while(m>=0) {m=m-1;random.seek(m);int c=random.readByte();if(c<=255&&c>=0)System.out.print((char)c);else {m=m-1;random.seek(m);byte cc[]=new byte[2];random.readFully(cc);System.out.print(new String(cc));} }}catch(Exception exp){} }}4.1.2运行界面4.2.1程序代码import java.io.*;public class E {public static void main(String args[ ]) {File file=new File("E.java");File tempFile=new File("temp.txt");try{ FileReader inOne=new FileReader(file);BufferedReader inTwo= new BufferedReader(inOne);FileWriter tofile=new FileWriter(tempFile);BufferedWriter out= new BufferedWriter(tofile);String s=null;int i=0;s=inTwo.readLine();while(s!=null) {i++;out.write(i+" "+s);out.newLine();s=inTwo.readLine();}inOne.close();inTwo.close();out.flush();out.close();tofile.close();}catch(IOException e){}}}4.3.1程序代码import java.io.*;import java.util.*;public class kehou1043 {public static void main(String args[]) {File file = new File("a.txt");Scanner sc = null;double sum=0;int count = 0;try { sc = new Scanner(file);eDelimiter("[^0123456789.]+");while(sc.hasNext()){try{ double price = sc.nextDouble(); count++;sum = sum+price;System.out.println(price);}catch(InputMismatchException exp){String t = sc.next();}}System.out.println("平均价格:"+sum/count); }catch(Exception exp){System.out.println(exp);}}}4.3.2运行界面第十一章2.1.1程序代码import java.sql.*;import java.util.*;public class kehou1121 {public static void main(String args[]) {Query query=new Query();String dataSource="myData";String tableName="goods";Scanner read=new Scanner(System.in);System.out.print("输入数据源名:");dataSource = read.nextLine();System.out.print("输入表名:");tableName = read.nextLine();query.setDatasourceName(dataSource);query.setTableName(tableName);query.setSQL("SELECT * FROM "+tableName);query.inputQueryResult();}}class Query {String datasourceName=""; //数据源名String tableName=""; //表名String SQL; //SQL语句public Query() {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException e) {System.out.print(e);}}public void setDatasourceName(String s) {datasourceName = s.trim();}public void setTableName(String s) {tableName = s.trim();}public void setSQL(String SQL) {this.SQL = SQL.trim();}public void inputQueryResult() {Connection con;Statement sql;ResultSet rs;try {String uri = "jdbc:odbc:"+datasourceName;String id = "";String password = "";con = DriverManager.getConnection(uri,id,password);DatabaseMetaData metadata = con.getMetaData();ResultSet rs1 = metadata.getColumns(null,null,tableName,null);int字段个数 = 0;while(rs1.next()) {字段个数++;}sql = con.createStatement();//创建SQL语句rs = sql.executeQuery(SQL);//执行SQL语句while(rs.next()) {for(int k=1;k<=字段个数;k++) {System.out.print(" "+rs.getString(k)+" ");}System.out.println("");}con.close();}catch(SQLException e) {System.out.println("请输入正确的表名"+e);}}}2.1.2运行界面2.2.1程序代码import java.sql.*;import java.util.*;public class kehou1122 {public static void main(String args[]) {Q query = new Q();String dataSource = "myData";String tableName = "goods";query.setDatasourceName(dataSource);query.setTableName(tableName);String name = "";Scanner read=new Scanner(System.in);System.out.print("商品名:");name = read.nextLine();String str="'%["+name+"]%'";String SQL = "SELECT * FROM "+tableName+" WHERE name LIKE "+str; query.setSQL(SQL);System.out.println(tableName+"表中商品名是"+name+"的记录");query.inputQueryResult();}}class Q {String datasourceName=""; //数据源名String tableName=""; //表名String SQL; //SQL语句public Q() {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e) {System.out.print(e);}}public void setDatasourceName(String s) {datasourceName = s.trim();}public void setTableName(String s) {tableName = s.trim();}public void setSQL(String SQL) {this.SQL = SQL.trim();}public void inputQueryResult() {Connection con;Statement sql;ResultSet rs;try {String uri = "jdbc:odbc:"+datasourceName;String id = "";String password = "";con = DriverManager.getConnection(uri,id,password);DatabaseMetaData metadata = con.getMetaData();ResultSet rs1 = metadata.getColumns(null,null,tableName,null);int字段个数 = 0;while(rs1.next()) {字段个数++;}sql = con.createStatement();rs = sql.executeQuery(SQL);while(rs.next()) {for(int k=1;k<=字段个数;k++) {System.out.print(" "+rs.getString(k)+" ");}System.out.println("");}con.close();}catch(SQLException e) {System.out.println("请输入正确的表名"+e);}}}2.2.2运行界面2.3.1程序代码import java.sql.*;import java.util.*;public class kehou1123 {public static void main(String args[]) {Q1 query = new Q1();String dataSource = "myData";String tableName = "goods";query.setDatasourceName(dataSource);query.setTableName(tableName);String SQL = "SELECT * FROM "+tableName+" ORDER BY madeTime";query.setSQL(SQL);System.out.println(tableName+"表记录按商品生产日期前后排序是: "); query.inputQueryResult();}}class Q1 {String datasourceName=""; //数据源名String tableName=""; //表名String SQL; //SQL语句public Q1() {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e) {System.out.print(e);}}public void setDatasourceName(String s) {datasourceName = s.trim();}public void setTableName(String s) {tableName = s.trim();}public void setSQL(String SQL) {this.SQL = SQL.trim();}public void inputQueryResult() {Connection con;Statement sql;ResultSet rs;try {String uri = "jdbc:odbc:"+datasourceName;String id = "";String password = "";con = DriverManager.getConnection(uri,id,password);DatabaseMetaData metadata = con.getMetaData();ResultSet rs1 = metadata.getColumns(null,null,tableName,null);int字段个数 = 0;while(rs1.next()) {字段个数++;}sql = con.createStatement();rs = sql.executeQuery(SQL);while(rs.next()) {for(int k=1;k<=字段个数;k++) {System.out.print(" "+rs.getString(k)+" ");}System.out.println("");}con.close();}catch(SQLException e) {System.out.println("请输入正确的表名"+e);}}}2.3.2运行界面第十二章4.1.1程序代码public class kehou1241{public static void main(String args[]) {Cinema a=new Cinema();a.zhang.start();a.sun.start();a.zhao.start();}}class TicketSeller //负责卖票的类。

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的graph用法

java的graph用法

java的graph用法
Java中的Graph用于表示图形结构,并支持在图形中添加、删除和查询节点和边缘。

Graph接口定义了一组基本的方法,例如addNode()、addEdge()、removeNode()、removeEdge()、getNode()和getEdge()等等,它们可以用来操作图形结构。

Graph接口有几个实现,包括SimpleGraph、DirectedGraph、UndirectedGraph等等。

在使用Graph之前,需要先导入相关的库文件和类,例如
org.jgrapht.Graph和org.jgrapht.graph.DefaultEdge等等。

Graph 中的节点和边缘可以使用任何对象来表示,例如字符串、数字、自定义对象等等。

在创建节点和边缘时,可以使用Graph中提供的addVertex()和addEdge()方法来添加它们。

查询节点和边缘时,可以使用getNode()和getEdge()方法,它们将返回与给定节点或边缘相关的所有节点或边缘。

在使用Graph时,需要注意一些常见的问题,例如避免循环依赖、处理图形中的重复节点和边缘、避免死锁等等。

- 1 -。

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

5. 画圆弧
Java使用Arc2D类的两个子类Arc2D.Float、 Arc2D.Double来创建圆弧。 如: Arc2D.Float ar=new Arc2D.Float(10F,20F,50F,60F,30F,60F,Arc2D.CHORD);
g2.draw(ar);
该语句在(10,20)处创建一段圆弧,其宽度和高度分别为50和60个像素, 弧的起始弧度为30°,逆时针转过60°后,用一条线段连接弧的两个端点。
setPaint(Color.red);//用红色填充图形
第二个是GradientPaint类,它可以定义一个渐变的颜色对 象,即对图形进行梯度着色。
GradientPaint类的构造方法如下:
GradientPaint(float x1,float x2,Color color1,float x2,float y2,Color color2,boolean cyclic);
绘制多边形,其中(xPoints[i],yPoints[i])为该多边形 的各个顶点的坐标, nPoints 为多边形的顶点个数。
void fillPolygon(int[] xPoints,int[] yPoints,int nPoints)
绘制多边形并且用前景色填充。 void drawPolyline(int[] xPoints,int[] yPoints,int nPoints) 绘制折线, (xPoints[i],yPoints[i]) 为依次连接的各 个点的坐标。 举例(PolyDemo.java)
绘制矩形,其中(x,y)为矩形的左上角坐标,width和height分别为矩 形的宽和高。 void fillRect (int x,int y,int width,int height) 画出矩形框并且用前景色填充。 void drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) 绘制带圆角的矩形,arcWidth和arcHeight分别为圆角的宽度和高度。 void fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) 画出带圆角的矩形框并且用前景色填充。 举例(RectDemo.java)
其中pattern指明用来填充的图案,rec2D指明图案的大小。
9.2 绘制基本图形
9.2.3 绘制椭圆
void drawOval(int x,int y,int width,int height)
绘制椭圆,其中(x,y)指定了椭圆的位置,即包围椭圆的 矩形的左上角坐标,width和height分别为椭圆的宽和高。当椭 圆的宽和高相同时,即为圆形。 void fillOval (int x,int y,int width,int height) 画出椭圆并且用前景色填充。 举例(OvalDemo.java)
g2.setPaint(redtoblack);
第三个是TexturePaint类,它允许用户使用一幅图像来填充图 形,即对图形进行纹理着色。用户提供一个用作填充图案的 BufferImage对象后,就可用该对象来填充图形。其构造方法如下:
public TexturePaint(BufferImage pattern,Rectangle2D rec2D);
使用端点(50,50)和(50,100)及控制点(10,10),(100,100)定义了一条三次曲 线。
8. 画多边形
Java使用GeneralPath类创建多边形,可利用GeneralPath 的方法moveTo() 和lineTo()定义多边形的第一个点和创建以一个新点作为终点的边。最后调用 closePath()方法关闭多边形。如用来创建一个三角形的程序代码如下: GeneralPath pa=new GeneralPath(); pa.moveTo(0,50); pa.lineTo(25,0);
pa.lineTo(50,50);
pa.closePath();
举例(Draw2DDemo.java)
9.3.2 绘图效果
绘图效果的实现主要包括图形着色处理和笔划处理两部分 内容。 1. 着色处理 Graphice2D的setPaint()方法可以定义一个填充模式,它 带有Paint对象作为它的参数,该对象的类用于实现Paint接口。 在Java 2D API中有3个类分别用于对图形进行单色着色、梯度 着色和纹理着色。 第一个是Color类,它用来实现Paint接口。若用单色填充图 形,只需用一个Color对象调用setPaint()方法即可。如:
1. 画直线
Java使用Line2D.Float类来创建一条直线。如: Line2D.Float line1=new Line2D.Float(10F,10F,20F,20F); g2.draw(line1);
2. 画矩形
Java使用Rectangle2D抽象类的两个子类Rectangle2D.Float、 Rectangle2D .Double来创建矩形。如: Rectangle2D.Float re=new Rectangle2D.Float(10F,10F,50F,60F); g2.draw(re);
7. 画三次曲线
Java使用CubicCurve2D类的两个子类CubicCurve2D.Float、 CubicCurve2D.Double来创建三次曲线。三次曲线由两个端点和两个控制点定 义。移动控制点,可改变曲线的形状。如: CubicCurve2D.Float cu=new CubicCurve2D.Float(50F,50F,10F,10F,100F,100F,50F,100F); g2.draw(cu);
3. 画圆角矩形
Java使用RoundRectangle2D抽象类的两个子类RoundRectangle2D.Float、 RoundRectangle2D .Double来创建圆角矩形。如: RoundRectangle2D.Float re=new
RoundRectangle2D.Float(10F,10F,50F,60F,10F,10F);
其中最后一个参数指明了圆弧如何结束,有三种取值:
Arc2D.OPEN:弧不封闭 Arc2D.CHORD:有一条线段连接弧的两个端点
Arc2D.PIE:弧与椭圆的中心连接起来,像一个扇形。
6. 画二次曲线
Java使用QuadCurve2D类的两个子类QuadCurve2D.Float、 QuadCurve2D.Double来创建二次曲线。二次曲线由两个端点和一个控制点定 义。移动控制点,可改变曲线的形状。如: QuadCurve2D.Float qu=new QuadCurve2D.Float(50F,50F,10F,10F,50F,100F); g2.draw(qu); 使用端点(50,50)和(50,100)及控制点(10,10)定义了一条二次曲线。
9.2 绘制基本图形
9.2.4 绘制圆弧
void drawArc(int x,int y,int width,int height,int startAngle,int arcAngle) 绘制圆弧,其中(x,y)指定了弧线所在圆的左上角的坐标, width和height分别为圆弧的宽和高,startAngle为圆弧的起始 角度, arcAngle为圆弧的角度(张角),取正(负)值为沿逆 (顺)时针方向。当张角的取值大于360°时,就是椭圆。 void fillArc(int x,int y,int width,int height ,int startAngle,int arcAngle)
其中(x1,y1)为起点坐标,(x2,y2)为终点坐标。 Java定义的一个窗口工作区是以整个屏幕的左上角为坐标原 点(0,0),以像素为单位,顺序向右和向下延伸。 举例(DrawLine.java)
9.2 绘制基本图形
9.2.2 绘制矩形
void drawRect(int x,int y,int width,int height)
画出圆弧并且用前景色填充得到一个扇形。以时钟3点钟 方向为基准0度。逆时针为正,顺时针为负。arcAngle表示从 startAngle开始跨过的角度。 举例(ArcDemo.java)
9.2 绘制基本图形
9.2.5 绘制多边形
void drawPolygon(int[] xPoints,int[] yPoints,int nPoints)
g2.draw(re);
4. 画椭圆
Java使用Ellipse2D类的两个子类Ellipse2D.Float、 Ellipse2D.Double来创 建椭圆。如: Ellipse2D.Float el=new Ellipse2D.Float(10F,20F,50F,60F);
g2.draw(el);
表示颜色color1从点(x1,y1)出发到达点(x2,y2)变成color2。若 cyclic为false,表示非循环变换,颜色渐变到终点时颜色值停留在 终点颜色上。yyclic为true表示颜色循环变幻,填充颜色在到达终 点后变回起点颜色。如:
GradientPaint redtoblack=new GradientPaint(20,20,Color.red,50,50,Color.black,false);
第九章 Java的绘图功能
9.1 绘图的基本方法 9.2 绘制基本图形 9.3 绘制2D图形 9.4 文字输出 9.5 图像处理 9.6 动画处理
9.1 绘图的基本方法
Java的图形处理主要由AWT提供的Graphics类来实现。利用 Graphics类的各种方法可以绘制简单的图形和输出文本。 Component 类提供了几种有关绘图的方法,主要是 paint() 、 update()和repaint()。 public void paint(Graphics g) :提供了绘图的基本操作。 public void update(Graphics g):更新图形,它首先清除背景, 然后设置前景,再调用paint()完成组件的具体绘图。 repaint() 方法重绘图形,当组件外形发生变化,即大小改变 或位置移动时, repaint()立即被系统调用,实现对组件的更新。 public void repaint() public void repaint (long tm) :在tm毫秒内运行repaint public void repaint(int x,int y,int width,int height) 重绘某区域
相关文档
最新文档