日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java graphics类_java_关于Graphics类

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java graphics类_java_关于Graphics类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

展開全部

談談java.awt.Graphics類

圖形環62616964757a686964616fe59b9ee7ad9431333233663438境的概念同在 GUI 平臺上開發應用程序緊密相關。雖然通常將窗口和組件本身作為對象來表達,但仍然需要另一個接口來執行實際的繪制、著色以及文本輸出操作。Java 語言中提供這些功能的基類稱作 java.awt.Graphics。從 java.awt.Component 類(所有窗口對象的基類)繼承的類提供了一個名為 paint() 的方法,在需要重新繪制組件時,調用該方法。

paint() 方法只有一個參數,該參數是 Graphics 類的實例。

Graphics 類支持幾種確定圖形環境狀態的特性。以下列出了部分特性:

1.Color:當前繪制顏色,它屬于 java.awt.Color 類型。所有的繪制、著色和純文本輸出都將以指定的顏色顯示。

2.Font:當前字體,它屬于 java.awt.Font 類型。它是將用于所有純文本輸出的字體。

3.Clip:java.awt.Shape 類型的對象,它充當用來定義幾何形狀的接口。該特性包含的形狀定義了圖形環境的區域,繪制將作用于該區域。通常情況下,這一形狀與整個圖形環境相同,但也并不一定如此。

4.ClipBounds:java.awt.Rectangle 對象,它表示將包圍由 Clip 特性定義的 Shape 的最小矩形。它是只讀特性。

5.FontMetrics:java.awt.FontMetrics 類型的只讀特性。該對象含有關于圖形環境中當前起作用的 Font 的信息。

6.Paint Mode:該特性控制環境使用當前顏色的方式。如果調用了 setPaintMode() 方法,那么所有繪制操作都將使用當前顏色。如果調用了 setXORMode() 方法(該方法獲取一個 Color 類型的參數),那么就用指定的顏色對像素做“XOR”操作。XOR 具有在重新繪制時恢復初始位模式的特性,因此它被用作橡皮擦除和動畫操作。

Graphics 類方法:

可以將 java.awt.Graphics 支持的非特性方法劃分為三個常規類別之下:

1.跟蹤形狀輪廓的繪制方法:

draw3DRect() drawArc() drawBytes() drawChars()

drawImage() drawLine() drawOval() drawPolygon()

drawPolyline() drawRect() drawRoundRect() drawString()

2.填充形狀輪廓的繪制方法:

fill3DRect() fillArc() fillOval()

fillPolygon() fillRect() fillRoundRect()

3.諸如 translate() 之類的雜項方法,它們將圖形環境的起點從其缺省值 (0,0) 變成其它值。

請注意,沒有對任意形狀進行操作的操作。直到 Java 2D 出現以前,圖形操作一直都是很有局限性的。還需注意的是,對于渲染具有屬性的文本也沒有直接支持;顯示格式化文本是一項費事的任務,需要手工完成。

下面我們來看一些具體的實例(注:所有的實例都沒有加上關閉窗口的事件驅動,只能用Ctrl+C來中斷程序):

1.畫線程序:

import java.awt.*;

import java.awt.event.*;

import java.util.*;

class Main extends Frame {

Vector points = new Vector();

int lastDrawnPoint = 0;

Main() {

super("drawLine Example");

setSize(200, 200);

addMouseListener(new MouseEventHandler());

addMouseMotionListener(new MouseMotionEventHandler());

show();

}

public void paint(Graphics g) {

Point curPt = null;

for (int i=0; i Point pt = (Point)points.elementAt(i);

if (curPt != null) {

g.drawLine(curPt.x, curPt.y, pt.x, pt.y);

}

curPt = pt;

}

lastDrawnPoint = points.size();

}

public void update(Graphics g) {

Point curPt = null;

lastDrawnPoint = Math.max(0, lastDrawnPoint-1);

for (int i=lastDrawnPoint; i Point pt = (Point)points.elementAt(i);

if (curPt != null) {

g.drawLine(curPt.x, curPt.y, pt.x, pt.y);

}

curPt = pt;

}

lastDrawnPoint = points.size();

}

class MouseEventHandler extends MouseAdapter {

public void mousePressed(MouseEvent evt) {

points.addElement(evt.getPoint());

repaint();

}

}

class MouseMotionEventHandler extends MouseMotionAdapter {

public void mouseDragged(MouseEvent evt) {

points.addElement(evt.getPoint());

repaint();

}

}

static public void main(String[] args) {

new Main();

}

}

Graphics.drawLine(int x,int y,int x2,int y2);是從一個點的坐標到另一個點的坐標。

這個實例的運行結果也就是可以任意的畫線。可以任意的拖動鼠標,我們知道,線都是由點構成的。我們的主程序是繼承java.awt.Frame這個類,重載了paint()和update()這兩個方法。而在主類添加了兩個事件new MouseEventHandler()和MouseMotionEventHandler()。當我們運行程序結果時就能知道,paint()只是最初的調用,以后都是調用update(),而在MouseEventHandler()和MouseMotionEventHandler()中調用repaint()也是sun的程序員在內部已經嵌入的,所以這個不是我們需要擔心的,程序的原理我想大家都明白的,用一個向量來保存鼠標的點,lastDrawnPoint是一個重要的變量,然后就不說了。

2.調用圖片程序:

import java.awt.*;

class Main extends Frame {

Image image;

Main(String filename) {

super("drawImage Example");

try {

image = getToolkit().getImage(filename);

setIconImage(image);

} catch (Exception e) {

e.printStackTrace();

}

setSize(400, 200);

show();

}

public void paint(Graphics g) {

Insets insets = getInsets();

int x = insets.left, y = insets.top;

int w = image.getWidth(this);

int h = image.getHeight(this);

// original

g.drawImage(image, x, y, this);

// shrinken

g.drawRect(x, y, w/4+1, h/4+1);

g.drawImage(image, x+1, y+1, w/4, h/4, this);

// horizontally flipped

g.drawImage(image, x+w, y, x+2*w, y+h, w, 0, 0, h, this);

// vertically flipped

g.drawImage(image, x+2*w, y, x+3*w, y+h, 0, h, w, 0, this);

// enlarged; use -1 to indicate proportional height

g.drawImage(image, x+3*w, y, 2*w, -1, this);

}

static public void main(String[] args) {

if (args.length == 1) {

new Main(args[0]);

} else {

System.err.println("usage: java Main ");

}

}

}

相比較上面的程序,這個程式就簡單的多,它就是調用你本地的圖片,進行多角度顯示。java.awt.Frame.getToolkit().getImage(filename)和Graphics.drawImage()是重要的方法。

3。畫圓程式:

import java.awt.*;

import java.util.*;

import java.io.*;

class Main extends Frame {

Vector points = new Vector();

Main() {

super("drawOval Example");

setSize(200, 200);

show();

}

void addPoint(Point p) {

points.addElement(p);

repaint();

}

public void paint(Graphics g) {

Insets insets = getInsets();

int x = insets.left, y = insets.top;

for (int i=0; i Point p = (Point)points.elementAt(i);

g.drawOval(x+p.x-5, y+p.y-5, 10, 10);

}

}

static public void main(String[] args) {

Main m = new Main();

BufferedReader dis =

new BufferedReader(new InputStreamReader(System.in));

while (true) {

try {

m.addPoint(new Point(

Integer.parseInt(dis.readLine()),

Integer.parseInt(dis.readLine())));

} catch (Exception e) {

e.printStackTrace();

System.exit(1);

}

}

}

}

這個程式也比較簡單,不過他調用了個System.in來限制畫圓的坐標。

4.畫三角形:

import java.awt.*;

import java.awt.event.*;

class Main extends Frame {

Polygon polygon = new Polygon();

Main() {

super("drawPolygon Example");

addMouseListener(new MouseEventHandler());

addMouseMotionListener(new MouseMotionEventHandler());

setSize(200, 200);

show();

}

public void paint(Graphics g) {

System.out.println("paint:");

g.drawPolygon(polygon);

}

// The default update method clears the screen which causes

// flicker. This override avoids this.

public void update(Graphics g) {

System.out.println("update:");

paint(g);

}

class MouseEventHandler extends MouseAdapter {

public void mousePressed(MouseEvent evt) {

System.out.println("mousePressed:");

polygon.addPoint(evt.getX(), evt.getY());

repaint();

}

}

class MouseMotionEventHandler extends MouseMotionAdapter {

public void mouseDragged(MouseEvent evt) {

System.out.println("mouseDragged:");

polygon.addPoint(evt.getX(), evt.getY());

repaint();

}

}

static public void main(String[] args) {

new Main();

}

}

畫三角形是一個很有意思的東東。它注意是確定三個點了。第一個是最重要的。以后所有的三角形也這個為中心,如果你拖動鼠標的話,就會出現N多。

5.寫字:

import java.awt.*;

import java.awt.event.*;

class Main extends Frame implements ItemListener {

MainCanvas cv = new MainCanvas();

Choice choice = new Choice();

Main() {

super("drawString Example");

for (int i=4; i<60; i += 4) {

choice.addItem(""+i);

}

choice.select(0);

choice.addItemListener(this);

cv.setFontSize(4);

cv.setSize(300, 100);

add(cv, BorderLayout.CENTER);

add(choice, BorderLayout.SOUTH);

pack();

show();

}

public void itemStateChanged(ItemEvent evt) {

String what = (String)(evt.getItem());

cv.setFontSize(Integer.parseInt(what));

}

static public void main(String[] args) {

new Main();

}

}

class MainCanvas extends Canvas {

void setFontSize(int size) {

Font f = getFont();

if (f == null) {

f = new Font("Serif", Font.PLAIN, size);

} else {

f = new Font(getFont().getName(), getFont().getStyle(), size);

}

setFont(f);

repaint();

}

public void paint(Graphics g) {

String s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

FontMetrics fontM = g.getFontMetrics();

g.setColor(Color.white);

g.fillRect(0, 0, fontM.stringWidth(s), fontM.getHeight());

g.setColor(Color.black);

g.drawString(s, 0, fontM.getAscent());

}

}

已贊過

已踩過<

你對這個回答的評價是?

評論

收起

總結

以上是生活随笔為你收集整理的java graphics类_java_关于Graphics类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。