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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

java画笔覆盖在界面_Java实现画图程序和重绘

發(fā)布時(shí)間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java画笔覆盖在界面_Java实现画图程序和重绘 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上次聊了一下事件監(jiān)聽(tīng)機(jī)制,今天就來(lái)聊一下怎么實(shí)現(xiàn)一個(gè)畫(huà)圖程序并且實(shí)現(xiàn)重繪。

一.實(shí)現(xiàn)畫(huà)圖程序

1.實(shí)現(xiàn)一個(gè)畫(huà)圖程序所需的API類?

JFrame窗體容器組件類

JPanel 面板元素組件類

JButton按鈕元素組件類

Dimension封裝組件的寬度和高度的類

BoarderLayout 邊框布局類

Graphics 畫(huà)筆類:提供各種繪制圖形的方法

Graphics2D 畫(huà)筆類:Graphics子類,提供各種繪制圖形更為復(fù)雜的控制。

Color顏色類:提供顏色

BasicStroke 接口Stroke的實(shí)現(xiàn)類,用于定義線條的特征

ActionListener 動(dòng)作事件接口

ActionEvent存儲(chǔ)動(dòng)作事件的相關(guān)(事件源對(duì)象)信息

MouseListener 鼠標(biāo)事件接口:提供處理按下,釋放,點(diǎn)擊,進(jìn)入和離開(kāi)動(dòng)作

MouseMotionListener鼠標(biāo)移動(dòng)事件接口:提供處理移動(dòng)和拖動(dòng)動(dòng)作的處理方法

MouseEvent存儲(chǔ)鼠標(biāo)事件的相關(guān)(事件源對(duì)象)信息

數(shù)組 是一個(gè)容器,用來(lái)存儲(chǔ)同一類型的數(shù)據(jù)

2.那怎么寫呢?

實(shí)現(xiàn)界面類

Public class ReDrawMain extends JPanel{

JFrame frame=new JFrame();

main(){}

initUI(){}

}

事件處理類

/**

* 1.定義DrawListener事件處理類,該類要實(shí)現(xiàn)ActionLIstener動(dòng)作事件接口、

* MouseListener鼠標(biāo)事件接口和MouseMotionListener鼠標(biāo)移動(dòng)事件接口,

*/

public class DrawListenerner implements ActionListener, MouseListener,

MouseMotionListener {}

3.一個(gè)畫(huà)圖程序需要實(shí)現(xiàn)的基本內(nèi)容

目標(biāo)1:點(diǎn)擊窗體上的不同的按鈕,獲取到按鈕上的文字信息。

事件監(jiān)聽(tīng)機(jī)制

1.事件源對(duì)象:所有的按鈕對(duì)象

2.事件監(jiān)聽(tīng)方法:addActionListener(ActionListener l);

3.事件接口(事件處理類):ActionListener

實(shí)現(xiàn)步驟:

1.定義DrawListener事件處理類,該類要實(shí)現(xiàn)ActionLIstener動(dòng)作事件接口,重寫接口中的所有抽象方法。

2.在重寫的事件處理方法中,獲取按鈕上的信息。

3.在ReDrawMain類的initUI方法中,實(shí)例化DrawListener事件處理類的對(duì)象,命名為dl。

4.將事件源按鈕對(duì)象通過(guò)addActionListener()監(jiān)聽(tīng)方法和事件處理類dl對(duì)象綁定。

目標(biāo)2:在窗體上按下鼠標(biāo)按鍵,然后釋放鼠標(biāo)按鍵,在按下和釋放的兩點(diǎn)之間繪制圖形

事件監(jiān)聽(tīng)機(jī)制

1.事件源對(duì)象:面板對(duì)象

2.事件監(jiān)聽(tīng)方法:addMouseListener(MouseListener l);

3.事件接口(事件處理類):MouseListener

實(shí)現(xiàn)步驟:

1.定義DrawListener事件處理類,該類要實(shí)現(xiàn)MouseListener鼠標(biāo)事件接口,重寫接口中的所有抽象方法。

2.在重寫的按下動(dòng)作和釋放動(dòng)作的事件處理方法中,在按下方法中獲取按下坐標(biāo)值,在釋放方法中獲取釋放的坐標(biāo)值;之后根據(jù)按下和釋放的坐標(biāo)值,以及圖形和顏色,使用Graphics來(lái)繪制對(duì)應(yīng)的圖形。

3.在ReDrawMain類的initUI方法中,實(shí)例化DrawListener事件處理類的對(duì)象,命名為dl。

4.將事件源窗體對(duì)象通過(guò)addMouseListener()監(jiān)聽(tīng)方法和事件處理類dl對(duì)象綁定。

目標(biāo)3:在窗體上按下鼠標(biāo)按鍵,然后拖動(dòng)鼠標(biāo),在按下和拖動(dòng)之間繪制曲線

事件監(jiān)聽(tīng)機(jī)制

1.事件源對(duì)象:面板對(duì)象

2.事件監(jiān)聽(tīng)方法:addMouseMotionListener(MouseMotionListener l);

3.事件接口(事件處理類):MouseMotionListener

二.重繪

1.實(shí)現(xiàn)畫(huà)圖程序后,問(wèn)題出現(xiàn)了 ≥﹏≤

我們會(huì)發(fā)現(xiàn)畫(huà)圖界面上繪制的圖形,當(dāng)我們放大或者最小化窗體,所有的圖形都將消失。

2.所以呢,我們必須知道重繪的原理 (? ˙o˙)?

所有的組件都是繪制出來(lái)的,那么組件就有一個(gè)繪制(paint)的方法;當(dāng)你改變窗體的大小時(shí),會(huì)自動(dòng)的去調(diào)用paint方法,將組件再畫(huà)一次。

當(dāng)改變窗體大小后,如果想要圖形不消失,必須要將圖形放在paint方法中進(jìn)行繪制。

3.敲黑板啦,那怎么實(shí)現(xiàn)我們繪制的圖形重繪? ???(??? ? ???)???

要讓圖形在面板的paint方法中,再畫(huà)一次。

定義圖形類,用來(lái)存儲(chǔ)圖形的四個(gè)坐標(biāo)、顏色、畫(huà)筆大小...

需要使用數(shù)組來(lái)存儲(chǔ)圖形數(shù)據(jù),數(shù)組的數(shù)據(jù)類型就為圖形類。

數(shù)組能存儲(chǔ)的元素個(gè)數(shù)是固定的,數(shù)組的大小就只能定義一個(gè)足夠大的。

三.實(shí)現(xiàn)一個(gè)有直線、填充矩形、填充圓、圓角矩形、3D矩形、文字、任意多邊形、五角星、

鉛筆、刷子、橡皮、噴槍、吸管以及可以選擇畫(huà)筆顏色的畫(huà)圖程序,并且實(shí)現(xiàn)重繪。

代碼如下:

package SummerCamp6;

/**

*界面類:實(shí)現(xiàn)一個(gè)有直線、填充矩形、填充圓、圓角矩形、3D矩形、文字、任意多邊形、

* 五角星、鉛筆、刷子、橡皮、噴槍、吸管以及可以選擇畫(huà)筆顏色的畫(huà)圖程序,并且實(shí)現(xiàn)重繪。

*/

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class ReDrawMain extends JPanel {

JFrame frame=new JFrame();

public static void main(String[] args) {

new ReDrawMain().initUI();

}

private Shape[] shapeArray = new Shape[10000];

/**

* 初始化界面的方法

*/

public void initUI() {

frame.setTitle("依米的畫(huà)圖板");

frame.setDefaultCloseOperation(3);

frame.setSize(1000, 700);

frame.setLocationRelativeTo(null);

DrawListenerner dl = new DrawListenerner(this, shapeArray);

JPanel panel1 = new JPanel(); // 北邊面板(存放鉛筆,噴槍等工具按鈕)

panel1.setPreferredSize(new Dimension(120, 50));

panel1.setBackground(Color.gray);

frame.add(panel1, BorderLayout.NORTH);

String[] str1 = { "鉛筆", "刷子", "噴槍", "吸管", "橡皮" };

for (int i = 0; i < str1.length; i++) {

JButton button_1 = new JButton(str1[i]);

panel1.add(button_1);

button_1.setPreferredSize(new Dimension(110, 30));

button_1.addActionListener(dl);

}

JPanel panel2 = new JPanel(); // 西邊面板(存放圖形按鈕)

panel2.setPreferredSize(new Dimension(130, 800));

panel2.setBackground(Color.gray);

frame.add(panel2, BorderLayout.WEST);

String[] str2 = { "直線", "填充圓", "文字", "圖片", "圓角矩形", "填充矩形", "3d矩形", "五角星",

"任意多邊形" };

for (int i = 0; i < str2.length; i++) {

JButton button_2 = new JButton(str2[i]);

panel2.add(button_2);

button_2.setPreferredSize(new Dimension(120, 30));

button_2.addActionListener(dl);

}

JPanel panel3 = new JPanel(); // 東邊面板(存放顏色按鈕)

panel3.setPreferredSize(new Dimension(130, 800));

panel3.setBackground(Color.gray);

frame.add(panel3, BorderLayout.EAST);

// 定義Color數(shù)組,用來(lái)存儲(chǔ)按鈕上要顯示的顏色信息

Color[] colorArray = { Color.BLUE, Color.GREEN, Color.RED, Color.BLACK,

Color.lightGray, Color.ORANGE, Color.PINK,

new Color(123, 100, 132) };

// 循環(huán)遍歷colorArray數(shù)組,根據(jù)數(shù)組中的元素來(lái)實(shí)例化按鈕對(duì)象

for (int i = 0; i < colorArray.length; i++) {

JButton button = new JButton();

button.setBackground(colorArray[i]);

button.setPreferredSize(new Dimension(50, 50));

// 4.將事件源按鈕對(duì)象通過(guò)addActionListener()監(jiān)聽(tīng)方法和事件處理類dl對(duì)象綁定。

button.addActionListener(dl);

panel3.add(button);

}

frame.add(this, BorderLayout.CENTER);

frame.setBackground(this.getBackground());

frame.setVisible(true);// 可見(jiàn)必須在gr之前,否則看不到畫(huà)筆

Graphics gr = this.getGraphics();// 從窗體上獲取畫(huà)筆對(duì)象

this.addMouseListener(dl);

this.addMouseMotionListener(dl);

dl.setG(gr);

}

// 聲明圖形對(duì)象數(shù)組,數(shù)組的能存儲(chǔ)的元素個(gè)數(shù)是10000個(gè)圖形

/**

* 重寫組件的paint方法

*/

public void paint(Graphics gr) {

super.paint(gr);//調(diào)用父類的paint()

// 循環(huán)遍歷shapeArray數(shù)組

for (int i = 0; i < shapeArray.length; i++) {

Shape shape = shapeArray[i];// 從數(shù)組中獲取Shape對(duì)象

if(shape!=null)//shape是否不為空,如果不為空則調(diào)用畫(huà)圖形的方法

shape.draw((Graphics2D)gr);//調(diào)用繪制圖形的方法

}

}

}

/**

* 1.定義DrawListener事件處理類,該類要實(shí)現(xiàn)ActionLIstener動(dòng)作事件接口、

* MouseListener鼠標(biāo)事件接口和MouseMotionListener鼠標(biāo)移動(dòng)事件接口,

*/

package SummerCamp6;

import java.awt.AWTException;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import java.awt.image.BufferedImage;

import java.util.Random;

import javax.swing.JButton;

import javax.swing.JPanel;

public class DrawListenerner implements ActionListener, MouseListener,

MouseMotionListener {

private String type = "鉛筆";// 聲明圖形屬性,用來(lái)存儲(chǔ)用戶選擇的圖形

private Color color = Color.black;// 聲明顏色屬性,用來(lái)存儲(chǔ)用戶選擇的顏色

private Graphics g;// 聲明Graphics畫(huà)筆類的對(duì)象名屬性

private int t1, t2, t3, t4, count = 0;

private int x1, y1, x2, y2;// 坐標(biāo)

private Shape shape;// 聲明圖形對(duì)象名

private Shape[] shapeArray;// 聲明存儲(chǔ)圖形對(duì)象的數(shù)組對(duì)象名屬性

private int number = 0;// 記錄數(shù)器,用來(lái)記錄已經(jīng)存儲(chǔ)的圖形個(gè)數(shù)。

private JPanel panel4;

Random r = new Random();

public BasicStroke s1;// 畫(huà)筆大小

BasicStroke s = new BasicStroke();

/**

* 1 構(gòu)造方法

*

* @param g是從DrawMain類的窗體上傳遞過(guò)來(lái)的畫(huà)筆對(duì)象

* @param shapeArray是從DrawMain類傳遞過(guò)來(lái)的存儲(chǔ)圖形的數(shù)組對(duì)象

*/

public DrawListenerner(JPanel panel4, Shape[] shapeArray) {

this.panel4 = panel4;

this.shapeArray = shapeArray;

}

public void setG(Graphics g) {

this.g = g;

}

/**

* 重寫ActionListener接口中的actionPerformed抽象方法。

*/

public void actionPerformed(ActionEvent e) {

JButton button = (JButton) e.getSource();// 獲取事件源對(duì)象

String text = button.getText();// 獲取按鈕上的文字信息

if (text == null || text.equals("")) {// 判斷是否點(diǎn)擊的是顏色按鈕

color = button.getBackground();// 獲取按鈕的背景顏色

System.out.println("color = " + color);

} else {

type = button.getText();// 獲取按鈕上的文字信息

System.out.println("text = " + text);

}

}

/**

* 當(dāng)你在事件源對(duì)象上發(fā)生鼠標(biāo)按鍵按下動(dòng)作時(shí)執(zhí)行此方法

*/

public void mousePressed(MouseEvent e) {

// 2.在重寫的按下動(dòng)作和釋放動(dòng)作的事件處理方法中,在按下方法中獲取按下坐標(biāo)值

x1 = e.getX();

y1 = e.getY();

// //設(shè)置畫(huà)筆的顏色

// g.setColor(color);

if (type.equals("吸管")) {

try {

x1 = e.getXOnScreen();

y1 = e.getYOnScreen();

// 創(chuàng)建一個(gè)機(jī)器人對(duì)象

Robot jiqiren = new Robot();

// 2.構(gòu)造一個(gè)矩形區(qū)域,這個(gè)區(qū)域就是你要獲取顏色的區(qū)域

Rectangle rec = new Rectangle(x1, y1, 1, 1);

BufferedImage ima = jiqiren.createScreenCapture(rec);

// 3.獲取圖片的背景像素點(diǎn)顏色:三原色red blue green,獲取圖片指定像素點(diǎn)顏色

int a = ima.getRGB(0, 0);

color = new Color(a);

// 4.把顏色設(shè)置到畫(huà)筆上

} catch (AWTException e2) {

e2.printStackTrace();

}

}

}

/**

* 當(dāng)你在事件源對(duì)象上發(fā)生鼠標(biāo)按鍵釋放動(dòng)作時(shí)執(zhí)行此方法

*/

public void mouseReleased(MouseEvent e) {

// 2.在重寫的按下動(dòng)作和釋放動(dòng)作的事件處理方法中,在釋放方法中獲取釋放的坐標(biāo)值;

x2 = e.getX();

y2 = e.getY();

// 2.之后根據(jù)按下和釋放的坐標(biāo)值,以及圖形和顏色,使用Graphics來(lái)繪制對(duì)應(yīng)的圖形。

if (type.equals("直線")) {

// // System.out.println(">>>>>" + g);

// g.drawLine(x1, y1, x2, y2);// 調(diào)用繪制直線的方法

// 根據(jù)數(shù)據(jù)來(lái)實(shí)例化圖形對(duì)象

shape = new ShapeLine(x1, y1, x2, y2, color, new BasicStroke(1));

// 調(diào)用圖形的繪圖方法

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

} else if (type.equals("任意多邊形")) {

if (count == 0) {

shape = new ShapeLine(x1, y1, x2, y2, color, new BasicStroke(1));

// 調(diào)用圖形的繪圖方法

shape.draw((Graphics2D) g);

count++;

t1 = x1;

t2 = y1;

}

else if (count != 0) {

shape = new ShapeLine(t3, t4, x2, y2, color, new BasicStroke(1));// 點(diǎn)擊鼠標(biāo)該點(diǎn)與前一個(gè)點(diǎn)相連

// 調(diào)用圖形的繪圖方法

shape.draw((Graphics2D) g);

if (e.getClickCount() == 2) {// 雙擊鼠標(biāo)則閉合線段,該最新的點(diǎn)與最早的點(diǎn)相連接,閉合圖形

shape = new ShapeLine(t1, t2, x2, y2, color, new BasicStroke(1));

shape.draw((Graphics2D) g);

count = 0;

}

// 記錄目前該點(diǎn)的位置

}

t3 = x2;

t4 = y2;

if (number < shapeArray.length) {

shapeArray[number++] = shape;

}

} else if (type.equals("圓角矩形")) {

shape = new ShapeRoundRect(Math.min(x1, x2), Math.min(y1, y2),

Math.abs(x1 - x2), Math.abs(y1 - y2), color,

new BasicStroke(), 30, 30);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

} else if (type.equals("填充圓")) {

shape = new ShapeCircle(x1, y1, x2, y2, color, s);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

} else if (type.equals("五角星")) {

shape = new ShapeStar(x1, y1, x2, y2, color, s);

shape.draw((Graphics2D) g);

System.out.println(">>>>>>>>>"+x1+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+y1);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

}

}

/**

* 當(dāng)鼠標(biāo)在窗體上按下按鍵并且拖動(dòng)時(shí)執(zhí)行此方法

*/

public void mouseDragged(MouseEvent e) {

x2 = e.getX();

y2 = e.getY();

Graphics2D g2d = (Graphics2D) g;

if (type.equals("鉛筆")) {

// 根據(jù)數(shù)據(jù)來(lái)實(shí)例化圖形對(duì)象

shape = new ShapeLine(x1, y1, x2, y2, color, new BasicStroke(1));

// 調(diào)用圖形的繪圖方法

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

x1 = x2;

y1 = y2;

} else if (type.equals("刷子")) {

// 根據(jù)數(shù)據(jù)來(lái)實(shí)例化圖形對(duì)象

shape = new ShapeLine(x1, y1, x2, y2, color, new BasicStroke(10));

// 調(diào)用圖形的繪圖方法

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

x1 = x2;

y1 = y2;

} else if (type.equals("噴槍")) {

g2d.setColor(color);

shape = new ShapeGum(x1, y1, x2, y2, color, s);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

x1 = x2;

y1 = y2;

} else if (type.equals("橡皮")) {

shape = new ShapeEraser(x1, y1, x2, y2, color, s);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

x1 = x2;

y1 = y2;

} else if (type.equals("圖片")) {

shape = new ShapeImage(color, x1, y1, x2, y2);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

} else if (type.equals("填充矩形")) {

shape = new ShapeFillRect(Math.min(x1, x2), Math.min(y1, y2),

Math.abs(x1 - x2), Math.abs(y1 - y2), color,

new BasicStroke(1));

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

} else if (type.equals("文字")) {

shape = new ShapeString(x1, y1, x2, y2, color, s);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

} else if (type.equals("3d矩形")) {// 7.3d矩形

shape = new Shape3DRect(x1, y1, x2, y2, color, s);

shape.draw((Graphics2D) g);

if (number < shapeArray.length) {

// 將圖形對(duì)象存入到數(shù)組中

shapeArray[number++] = shape;

}

}

}

/**

* 當(dāng)鼠標(biāo)在窗體上移動(dòng)鼠標(biāo)時(shí)執(zhí)行此方法

*/

public void mouseMoved(MouseEvent e) {

}

/**

* 當(dāng)你在事件源對(duì)象上發(fā)生鼠標(biāo)點(diǎn)擊(按下和釋放的動(dòng)作必須在同一個(gè)位置上)動(dòng)作時(shí)執(zhí)行此方法

*/

public void mouseClicked(MouseEvent e) {

}

/**

* 當(dāng)你的鼠標(biāo)光標(biāo)進(jìn)入事件源對(duì)象上時(shí)執(zhí)行此方法

*/

public void mouseEntered(MouseEvent e) {

}

/**

* 當(dāng)你的鼠標(biāo)光標(biāo)離開(kāi)事件源對(duì)象上時(shí)執(zhí)行此方法

*/

public void mouseExited(MouseEvent e) {

}

}

package SummerCamp6;

/**

* 定義Shape抽象類

*/

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

public abstract class Shape {

private int x1, y1, x2, y2;

private Color color;

private BasicStroke stroke;

public Shape(int x1, int y1, int x2, int y2, Color color, BasicStroke stroke) {

this.x1 = x1;

this.y1 = y1;

this.x2 = x2;

this.y2 = y2;

this.color = color;

this.stroke = stroke;

}

/**

* 繪制圖形的方法

*

* @param g畫(huà)筆對(duì)象

*/

public abstract void draw(Graphics2D g);

public int getX1() {

return x1;

}

public void setX1(int x1) {

this.x1 = x1;

}

public int getY1() {

return y1;

}

public void setY1(int y1) {

this.y1 = y1;

}

public int getX2() {

return x2;

}

public void setX2(int x2) {

this.x2 = x2;

}

public int getY2() {

return y2;

}

public void setY2(int y2) {

this.y2 = y2;

}

public Color getColor() {

return color;

}

public void setColor(Color color) {

this.color = color;

}

public BasicStroke getStroke() {

return stroke;

}

public void setStroke(BasicStroke stroke) {

this.stroke = stroke;

}

}

//3d矩形類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

public class Shape3DRect extends Shape{

public Shape3DRect(int x1, int y1, int x2,int y2, Color color, BasicStroke s) {

super(x1, y1, x2, y2, color,s);

}

public void draw(Graphics2D g){

g.setStroke(g.getStroke());

g.setColor(getColor());// 設(shè)置畫(huà)筆顏色

g.fill3DRect(getX1(), getY1(), getX2() - getX1(), getY2() - getY1(), true);

}

}

//填充圓類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

public class ShapeCircle extends Shape {

public ShapeCircle(int x1, int y1, int x2, int y2, Color color,

BasicStroke s) {

super(x1, y1, x2, y2, color, s);

}

public void draw(Graphics2D g) {

g.setStroke(g.getStroke());// 畫(huà)筆大小

g.setColor(getColor());// 設(shè)置畫(huà)筆顏色

g.fillOval(getX1(), getY1(), getX2() - getX1(), getY2() - getY1());// 繪制圓的方法

}

}

//橡皮類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

import javax.swing.JFrame;

public class ShapeEraser extends Shape{

public ShapeEraser(int x1, int y1, int x2, int y2, Color color, BasicStroke s) {

super(x1, y1, x2, y2,color,s);

}

public void draw(Graphics2D g){

g.setStroke(new BasicStroke(20));// 橡皮大小

JFrame frame = new JFrame();

g.setColor(frame.getBackground());

g.drawLine(getX1(),getY1(),getX2(),getY2());

}

}

//填充矩形類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

/**

* 定義ShapeRect類,該類是用來(lái)繪制矩形的類

*/

public class ShapeFillRect extends Shape {

public ShapeFillRect(int x1, int y1, int x2, int y2, Color color,

BasicStroke s) {

super(x1, y1, x2, y2, color, s);

}

/**

* 繪制圖形的方法

*

* @param g畫(huà)筆對(duì)象

*/

public void draw(Graphics2D g) {

g.setStroke(getStroke());// 設(shè)置畫(huà)筆的粗細(xì)

g.setColor(getColor());// 設(shè)置畫(huà)筆的顏色

g.fillRect(getX1(), getY1(), getX2(), getY2());// 繪制矩形

}

}

//噴槍類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

import java.util.Random;

public class ShapeGum extends Shape{

Random r = new Random();

public ShapeGum(int x1, int y1, int x2, int y2,Color color,BasicStroke stroke) {

super(x1, y1, x2, y2, color, stroke);

}

public void draw(Graphics2D g){

g.setStroke(new BasicStroke(1));

g.setColor(g.getColor());

g.drawLine(getX2(),getY2 (),getX2(),getY2());

for (int i = 0; i < 10; i++) {

int p = r.nextInt(10);

int q = r.nextInt(10); // 可以生成一個(gè)介于0(包含)到n(不包含)之間的整數(shù)

// nextInt(10)生成的就是0~10之間的隨機(jī)數(shù),包含0和10

g.drawLine(getX2() + p, getY2() + q, getX2() + p, getY2() + q);

}

}

}

//圖片類

package SummerCamp6;

import java.awt.Color;

import java.awt.Graphics2D;

import javax.swing.ImageIcon;

public class ShapeImage extends Shape{

public ShapeImage(Color color, int x1, int y1, int x2, int y2) {

super(x1, y1, x2, y2, null,null);

}

public void draw(Graphics2D g){

ImageIcon im = new ImageIcon("C:\\Users\\某某\\Desktop\\路線\\1.jpg");// 畫(huà)出圖片

g.drawImage(im.getImage(), getX1(), getY1(), getX2() - getX1(), getY2() - getY1(), null);// 釋放鼠標(biāo)畫(huà)出圖片

}

}

/**

* 定義ShapeLine類,該類是用來(lái)繪制直線的類

*/

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

public class ShapeLine extends Shape {

public ShapeLine(int x1, int y1, int x2, int y2, Color color,

BasicStroke stroke) {

super(x1, y1, x2, y2, color, stroke);

}

/**

* 繪制圖形的方法

*

* @param g畫(huà)筆對(duì)象

*/

public void draw(Graphics2D g) {

g.setStroke(getStroke());// 設(shè)置畫(huà)筆的粗細(xì)

g.setColor(getColor());// 設(shè)置畫(huà)筆的顏色

g.drawLine(getX1(), getY1(), getX2(), getY2());// 繪制直線

}

}

/**

* 定義ShapeRoundRect類,該類是用來(lái)繪制圓角矩形的類

*/

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

/**

* 定義ShapeRoundRect類,該類是用來(lái)繪制圓角矩形的類

*/

public class ShapeRoundRect extends Shape {

private int arcH, arcW;

public ShapeRoundRect(int x1, int y1, int x2, int y2, Color color,

BasicStroke s, int arcH, int arcW) {

super(x1, y1, x2, y2, color, s);

this.arcH = arcH;

this.arcW = arcW;

}

/**

* 繪制圖形的方法

*

* @param g畫(huà)筆對(duì)象

*/

public void draw(Graphics2D g) {

g.setStroke(getStroke());// 設(shè)置畫(huà)筆的粗細(xì)

g.setColor(getColor());// 設(shè)置畫(huà)筆的顏色

g.drawRoundRect(getX1(), getY1(), getX2(), getY2(), arcW, arcH);// 繪制矩形

}

}

//五角星類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

public class ShapeStar extends Shape {

private int x,y;

private int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b1, b2, b3, b4, b5,

b6, b7, b8, b9, b10;

public ShapeStar(int x1, int y1, int x2, int y2, Color color, BasicStroke s) {

super(x1, y1, x2, y2,color,s);

}

public void draw(Graphics2D g){

g.setStroke(new BasicStroke());// 畫(huà)筆大小

g.setColor(getColor());//設(shè)置畫(huà)筆顏色

x = (Math.abs(getX2()-getX1())) / 8;

y = (Math.abs(getY2()-getY1())) / 8;

a1 = getX1() + 4 * x;

b1 = getY1() + y;

a2 = getX1();

b2 = getY1() + 3 * y;

a3 = getX1() + 8 * x * 2 / 6;

b3 = getY1() + 3 * y;

a4 = getX1() + 8 * x * 4 / 6;

b4 = getY1() + 3 * y;

a5 = getX2();

b5 = getY1()+ 3 * y;

a6 = getX1() + 4 * x / 2;

b6 = getY1() + 4 * y;

a7 = getX1() + 6 * x;

b7 = getY1() + 4 * y;

a8 = getX1() + 4 * x;

b8 = getY1() + 8 * y * 2 / 3;

a9 = getX1();

b9 = getY2();

a10 = getX2();

b10 = getY2();

g.drawLine(a1, b1, a3, b3);

g.drawLine(a1, b1, a4, b4);

g.drawLine(a2, b2, a3, b3);

g.drawLine(a2, b2, a6, b6);

// g.drawLine(a3, b3, a4, b4);

// g.drawLine(a3, b3, a6, b6);

g.drawLine(a4, b4, a5, b5);

// g.drawLine(a4, b4, a7, b7);

g.drawLine(a5, b5, a7, b7);

// g.drawLine(a6, b6, a8, b8);

g.drawLine(a6, b6, a9, b9);

g.drawLine(a7, b7, a10, b10);

// g.drawLine(a7, b7, a8, b8);

g.drawLine(a8, b8, a10, b10);

g.drawLine(a8, b8, a9, b9);

}

}

//文字類

package SummerCamp6;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics2D;

public class ShapeString extends Shape{

private String str="彈個(gè)吉他";

public ShapeString(int x1, int y1, int x2, int y2, Color color, BasicStroke s) {

super(x1, y1, x2, y2,color,s);

}

public void draw(Graphics2D g){

g.setStroke(new BasicStroke());// 畫(huà)筆大小

g.setColor(getColor());//設(shè)置畫(huà)筆顏色

g.drawString(str, getX1(), getY1());// 5.文字

}

}

實(shí)現(xiàn)效果:

開(kāi)始畫(huà)圖,后臺(tái)顯示按鍵

令畫(huà)圖板最大化,圖形沒(méi)有消失

代碼段中夾有注釋,非常生動(dòng)形象,所以我就不一一再寫出來(lái)解釋了哈。

最后我們就把一個(gè)功能完好的畫(huà)圖板完成了,是不是很簡(jiǎn)單丫,有沒(méi)有心動(dòng)的感覺(jué),想不想寫一個(gè)丫,趕快動(dòng)手吧少年。

我get到的實(shí)現(xiàn)畫(huà)圖板和重繪(用數(shù)組保存圖形)的技能就差不多是這些了,如果以后又get到一些進(jìn)階技能我會(huì)在技術(shù)博客更新的哈,么么噠。

總結(jié)

以上是生活随笔為你收集整理的java画笔覆盖在界面_Java实现画图程序和重绘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜影院一区二区三区 | 中文字幕免费高清在线 | 天天插插插| 99热这里只有精品在线观看 | 蜜桃成熟时李丽珍在线观看 | 国产成人精品免费视频 | 亚洲专区免费 | 女人脱了内裤趴开腿让男躁 | 青娱乐免费在线视频 | 日本黄色片免费看 | 15p亚洲| 国产一线二线在线观看 | 欧美三级午夜理伦三级小说 | 国产亚洲精品久久777777 | 久久国产日韩 | 色综合国产 | 国产三区在线观看 | 国产一级片免费看 | 99久久精品一区二区 | 男插女在线观看 | 亚欧在线播放 | 亚洲色图在线播放 | 久久黄色片视频 | av天天有 | 亚洲久久视频 | 97视频播放| 风流老熟女一区二区三区 | av三级在线播放 | av资源在线免费观看 | youjizz视频 | 男人在线视频 | 久久国产精品久久久 | 欧美一区二区三区激情视频 | 亚洲一区91| 成人av男人的天堂 | 女人被灌满精子 | 性欧美成人播放77777 | 亚洲av无码一区二区二三区 | 国产乱人对白 | 一区二区三区四区高清视频 | 骚鸭av| 欧美另类v| 99re免费视频| 亚洲一区二区三区影视 | 色婷婷一区二区三区四区 | 日韩视频在线观看视频 | 天堂久久久久久 | 欧美日韩色片 | 91精品国产综合久久国产大片 | 欧美日韩在线免费观看 | 男人日女人免费视频 | 黄色一级片网站 | 欧美精品videos另类日本 | 国产18禁黄网站免费观看 | av免费观看网址 | 亚洲性少妇 | 九九在线精品视频 | 国产伦精品一区二区三区四区免费 | 欧美午夜理伦三级在线观看 | 久草资源站 | 国产毛片久久久久 | 久久亚洲日本 | 亚洲20p | 亚洲成人精品网 | 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲精品女人 | 在线观看中出 | 午夜人体视频 | 男女乱淫| 国产污在线观看 | 青青青国产精品一区二区 | 日韩欧美影院 | 99国产视频 | 人人妻人人玩人人澡人人爽 | 男人和女人在床的app | 网友自拍一区 | 国产精品18久久久 | 欧美草逼网 | 中文字幕视频一区 | 亚洲一区国产一区 | av网站免费播放 | 国产中文一区二区三区 | 日本美女动态图 | 亚洲一区无| 精品在线二区 | 国产97免费视频 | 黄色一级大片在线免费看产 | 亚洲永久免费视频 | 韩国成人理伦片免费播放 | 亚洲午夜国产 | 亚洲欧美高清在线 | 日韩新片王网 | 91精品网| 好吊一区二区三区视频 | 黄色激情视频网站 | 天天看a | 狠狠做深爱婷婷久久综合一区 | 欧美伊人影院 | 男人天堂免费视频 |