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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java画图板代码_java学习小总结——画图板制做(附代码)

發布時間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java画图板代码_java学习小总结——画图板制做(附代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習java這門編程語言也有一個多月了。~若是能用本身學的編程語言去開發一些小程序軟件能夠說是本身一直求之不得吧!。模仿XP的畫圖板的開發則是學java來最先作的一個小軟件。也是把以前學到的不少知識得意聯系而且掌握熟練運用的一個過程吧!java

先讓你們看看弄到如今這個畫圖板的樣子吧:編程

這個畫板如今能夠實現的功能包括話各類圖形、鉛筆、噴漆、刷子、橡皮、吸管取色這些。下面就來一步步分析下這個畫板是怎么實現的吧!小程序

1、界面的生成windows

大致分析一下一個畫圖板界面能夠分紅那些部分:總體的一個大窗體,處于最頂部的一個菜單欄,左側的工具欄,中間空白的畫圖紙,下部的顏色選擇器以及底部有一條幫助提示欄。最先我所作的畫圖板把這些生成界面的相關代碼都給寫在了同一個類里面,其中包括各類組件的添加和布局,那樣寫的話就會顯得十分的亂,想要修改某一部分就要在里面找上很久。后來這個最新弄得畫板在生成這個界面的時候采用的方法是每一部分的組件單獨成一類,在每個類中寫一個初始化的方法,而且重載他的構造方法,這樣只要在主類中調用他的構造方法再合理的安排一下布局就能夠了。這樣作每一部分組件單獨成類顯得十分清晰,但也有必定的不足,就是在這些類與后來定義的監聽器類之間相互傳遞參數的時候就會很麻煩,常常傳參數傳的本身頭昏腦脹的。。但確定沒有萬全的方法吧,看本身習慣怎么弄了~~數組

各個組件部分是怎么生成的在這里我就不一一列出來了,這兒就把左側工具欄部分的生成用代碼表示一下,其它部分都類似的。dom

package db.xyz.DrawBoardTool;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.FlowLayout;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JPanel;

import db.xyz.Listener.DrawListener;

import db.xyz.Listener.HelpListener;

/**

* 建立工具欄

* @author xiao

*

*/

public class DrawBoardTool extends JPanel{

DrawListener dListener;

/*

* 重載他的構造方法

*/

public DrawBoardTool(DrawListener dListener){

this.dListener = dListener;

unitTools();

}

/*

* 生成工具欄的方法

*/

public void unitTools(){

//設置工具欄布局為流式布局

this.setLayout(new FlowLayout());

//建立一個窗體對象

JPanel panel = new JPanel();

//設置布局為網格布局

panel.setLayout(new FlowLayout());

panel.setPreferredSize(new Dimension(70,300));

//數組存放圖片位置

String [] tool = {"image/line.png","image/pencil.png","image/rect.png","image/frect.png","image/oval.png","image/foval.png","image/zhex.png","image/erase.png","image/penqi.png","image/brush.png","image/roundrect.png","image/xiqu.jpg"};

//數組存放控制命令

String [] command = {"line","pencil","rect","frect","oval","foval","zhex","erase","penqi","brush","roundrect","xiqu"};

HelpListener dl = new HelpListener();

for(int i = 0;i

ImageIcon imgIcon = new ImageIcon(tool[i]);

//建立JButton按鈕對象添加圖標設置大小

JButton button = new JButton(imgIcon);

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

//將按鈕添加到panel上

panel.add(button);

button.setActionCommand(command[i]);

button.addActionListener(dListener);

button.addMouseListener(dl);

}

JPanel panel_sel = new JPanel();

panel_sel.setBackground(Color.LIGHT_GRAY);

panel_sel.setPreferredSize(new Dimension(60,80));

panel.add(panel_sel);

this.add(panel);

}

}

能夠看一下這里添加各個組件的按鈕時候采用的是一個循環,這樣添加圖標能夠節省不少語句,而且在每一個循環添加按鈕的同時也對這些按鈕添加了按鈕圖片圖標,設置了動做命令。生成這樣一個產生工具欄的類后,在主類中只要實例化一個DrawBoardTool類的對象,再設置他的布局為放置在西邊的邊框布局就完成了工具欄的添加。編程語言

其余那些組建模塊的生成與添加的代碼就再也不這里列出了,由于都是很類似的,最后會付所有代碼的。工具

2、監聽器的添加——使畫板有生命布局

這樣在添加了各個組件以后的畫板只能夠說是形似XP的畫圖板,但他倒是一個死的。~沒法執行任何動做,除非右上角的關閉按鈕。接下來就是要讓這個畫板富有生命,咱們點擊直線,就能夠在白紙上畫直線……學習

以前關于監聽器只接觸過動做監聽器就是ActioinListener。但這里在畫圖的時候須要的就是與鼠標有關監聽器:MouseListener和MouseMotionListener。這兩個監聽器都有著本身的方法,其中MouseListener有五個方法,分別對應的操做是鼠標按下、松開、進入、移出和點擊。MouseMotionListener只有一個鼠標拖動的方法。這些方法足以完成咱們的畫圖板。

關于監聽器具體怎么用就不用我說明了吧。看這些文章的都是大牛們。~我也只總結一下在設置這些監聽器時容易出錯的地方吧。

先來了解下畫圖的機制吧,就好比畫直線,咱們鼠標按下進行拖動,而后松開的時候屏幕上就會出現一條直線。怎么畫直線的方法不須要咱們本身去寫,Graphics類中已經定義好了方法:drawLine(x1,y1,x2,y2);能夠看出這個方法是須要傳入4個參數的,分別是兩個點的4個坐標,這樣調用這個方法后就會在這兩個點之間生成一條直線。因此分析一下咱們只須要獲得的就是鼠標按下開始拖動時的那個起始點的坐標以及最后松開畫直線時的那個終點的坐標,就能夠完成這個直線。

咱們就要重寫MouseListener這個接口中的方法:mousePressed和mouseReleased。

public void mousePressed(MouseEvent e) {

String command = e.getActionCommand();

x1 = e.getX();

y1 = e.getY();

}

public void mouseReleased(MouseEvent e) {

int x2 = e.getX();

int y2 = e.getY();

if(command.equals("line")){

//畫一條直線

db.g.drawLine(x1,y1,x2,y2);

}

這樣就能夠畫直線了!其中有一句代碼String command = e.getActionCommand();他的做用是獲取動做命令。咱們在添加按鈕的時候給每個按鈕都賦予了不一樣的動做命令,這樣是為了判斷咱們選擇的到底是那一個按鈕要執行那一種操做。在監聽器里面調用 e.getActionCommand();就能夠得到所按按鈕的動做命令,這里獲取動做命令以后判斷若是是"line"那么就是要畫直線,因此在鼠標松開的時候調用了drawLine那個方法來畫直線。

這里還要說一下那個g是什么東西~~g說白了就是畫布,就是那片白紙。咱們在生成畫布以后要調用一個方法:Graphics g = dpaper.getGraphics(); 這個語句的做用就是獲取畫布,就是為了知道咱們要在哪里進行做圖的。

如今這個畫圖板已經能夠畫一條直線了,與畫直線相似的還有(內填充)矩形,(內填充)橢圓,圓角矩形這些,說類似但也不徹底相同,有一點仍是須要注意的。以畫矩形為例,咱們查看API中drawRect這個方法發現他也有四個參數:int?x, int?y, int?width, int?height。很顯然這四個參數是一個點的一對兒坐標和長還有寬。這里若是仍是像以前畫直線那樣把x1賦給x,y1賦給y。x2-x1賦給width,y2-y1賦給height。若是這樣的話,運氣好的話咱們是能夠話出來一個矩形的,但只能正確的畫出一種矩形,就是鼠標拖動的方向是從左上向右下的。其余的矩形會偏離咱們鼠標所滑動的區域。那這是為何呢?其實只要咱們好好看一下drawRect這個方法,好好看下他的四個參數表明的東西就會發現問題:坐標xy是矩形的左上點的坐標。因此咱們鼠標按下松開獲取的x1x2y1y2這四個坐標,咱們就要從中找出左上角的那個坐標。不難分析,窗體左上角的坐標為(0,0)。因此左上角的坐標是較小的,因此只需調用一個取較小值的一個方法Math.min(x1,x2),Math.min(y1, y2)這樣分別賦給x,y就能夠了。另外,長寬的設置,咱們也不能直接就x2-x1,y2-y1,須要對其取一個絕對值,這一點很好理解吧。那就是Math.abs(x1-x2),Math.abs(y1-y2)。這樣就能夠正確的畫出一個矩形了。

如今那些直線、矩形、橢圓這些均可以實現了。下面再總結下鉛筆那一類工具的實現。

若是咱們打開windows自帶的畫板,使用鉛筆工具畫一段曲線,再用放大鏡來觀看,就會發現:鉛筆所畫出的曲線其實就是一段段很短的直線鏈接所造成!這就給咱們寫鉛筆的方法帶來了靈感。但這里還須要用到另外一個監聽器:MouseMotionListener。它里面只有一個方法:MouseDragged。很顯然這個方法是在鼠標拖動的時候調用。因此咱們在鼠標按下的時候獲取到x1,y1這初始坐標,以后每拖動一次就獲取一對(x3,y3)坐標,并在這兩個點之間畫一段小直線,以后再把這個(x3,y3)賦給(x1,y1)做為下一段直線的初始坐標,當拖動后再來畫出下一小段直線,如此往復就能夠完成鉛筆的功能啦!

public void mouseDragged(MouseEvent e) {

//畫鉛筆

if(command.equals("pencil")){

x3 = e.getX();

y3 = e.getY();

db.g.drawLine(x1,y1,x3,y3);

x1 = x3;

y1 = y3;

}

鉛筆弄好啦那什么橡皮和刷子天然而成。噴漆的作法也如此,只不過噴漆還要多一個隨機數,就是在周圍多少坐標的范圍內隨機生成必定的小點點來實現噴漆的功能:

//畫噴漆

else if(command.equals("penqi")){

x3 = e.getX();

y3 = e.getY();

Random rand = new Random();

//使用循環,來畫15個小點

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

//在20個像素點的范圍內隨機一個值

int tempx = rand.nextInt(20);

int tempy = rand.nextInt(20);

//開始畫點了

db.g.drawLine(x3+tempx, y3+tempy, x3+tempx, y3+tempy);

}

}

這樣畫圖板的這些基本功能就都完成了。還有一個就是吸管取色的功能,這個再下一篇關于畫圖板的重繪操做時再來介紹吧!

3、讓畫圖板靚麗起來

如今雖然各個組件的功能都已實現,但卻都是黑色的,畫的只有黑色的直線,黑色的矩形、橢圓……那么就要使咱們能夠給做圖設置顏色。這個就很簡單了。咱們以前在界面中已經把顏色條兒給生成了,那么咱們只要使一個監聽器堅挺那些按鈕,再經過動做命令來判斷所選擇的顏色,在調用setColor這個方法就能夠完成了!

到如今,這個畫板的基本功能就完成啦~~快來畫出本身喜歡的圖案吧!!

總結

以上是生活随笔為你收集整理的java画图板代码_java学习小总结——画图板制做(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

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