日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

java實現(xiàn)畫圖板功能

瀏覽:16日期:2022-08-23 14:47:10

本文實例為大家分享了java實現(xiàn)畫圖板的具體代碼,供大家參考,具體內(nèi)容如下

畫圖板需要滿足的功能有:

畫線,畫三角形,畫矩形,畫多邊形,畫曲線設(shè)置不同顏色的畫筆改變窗口大小或最小化窗口后重新打開時圖案不消失

畫圖方法的編寫:

創(chuàng)建一個類,繼承JPanel類,重寫JPanel的繪制方法,重寫方法時寫上原有的繪制方法,再添加繪制已有的圖形的方法。(為了在改變窗口大小和最小化窗口后再打開時圖案不消失)

在畫圖方法中首先創(chuàng)建一個窗體,設(shè)置好各項參數(shù)后,將窗體設(shè)置邊框布局。由于繼承了JPanel類,重寫的JPanel的繪制方法對于this生效,所以this為畫圖部分的面板,將this設(shè)置背景色為白色,添加到邊框布局的中央。再創(chuàng)建一個面板對象(此面板對象用于存放按鈕),設(shè)置一個背景色并放在邊框布局的上方。

由于接下來的按鈕和畫圖面板都需要監(jiān)聽器,于是創(chuàng)建Listener類。Listener類實現(xiàn)ActionListener,MouseListener,MouseMotionListener的接口。Listener類需要重寫這些監(jiān)聽器接口的所有方法。

創(chuàng)建字符串?dāng)?shù)組存放畫圖形狀的名稱,接著使用for循環(huán),將字符串添加到各個按鈕上,再將按鈕添加到面板對象中,最后再給按鈕加上按鈕監(jiān)聽器;接著再創(chuàng)建顏色類的數(shù)組存放各種顏色,同樣使用for循環(huán),將顏色設(shè)置成按鈕的背景色,再將按鈕添加到邊框布局上方的面板對象中,再給按鈕添加監(jiān)聽器。最后再在面板上獲取畫筆并添加上鼠標(biāo)監(jiān)聽器。

package draw0924;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class drawframe extends JPanel{public static void main(String[] args) { drawframe dr=new drawframe(); dr._draw();}private Shape[] shape;public void _draw() { JFrame jf=new JFrame(); jf.setSize(800,800); jf.setTitle('畫圖窗口'); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.setLayout(new BorderLayout());//設(shè)置邊框布局 JPanel panel=new JPanel();//創(chuàng)建一個面板對象 panel.setBackground(Color.GREEN); jf.add(panel,BorderLayout.NORTH);//添加到邊框布局的上方 Listener butt=new Listener();//創(chuàng)建監(jiān)聽器類,并創(chuàng)建一個監(jiān)聽器對象 String[] str= {'畫線','畫三角形','畫矩形','畫多邊形','畫曲線'};//創(chuàng)建字符串?dāng)?shù)組存儲按鈕文字 for(int i=0;i<str.length;i++) { JButton jbu=new JButton(str[i]);//創(chuàng)建按鈕對象并把按鈕文字添加上 panel.add(jbu);//將按鈕添加到面板對象上 jbu.addActionListener(butt);//給按鈕添加監(jiān)聽器 } Color[] color= {Color.RED,Color.BLUE,new Color(104,150,144)};//創(chuàng)建顏色數(shù)組存儲畫筆顏色 for(int i=0;i<color.length;i++) { JButton jbu=new JButton();//創(chuàng)建按鈕對象 jbu.setBackground(color[i]);//將按鈕背景設(shè)置顏色 panel.add(jbu);//將按鈕添加到面板對象上 jbu.setPreferredSize(new Dimension(30,30));//設(shè)置按鈕大小 jbu.addActionListener(butt);//給按鈕添加監(jiān)聽器 } this.setBackground(Color.WHITE);//將繼承來的面板設(shè)置背景色 jf.add(this,BorderLayout.CENTER);//將此面板添加到邊框布局的中央 jf.setVisible(true); Graphics g=this.getGraphics();//在要繪畫的面板上獲取畫筆(要在窗口可視化之后) butt.setg(g);//將畫筆傳入監(jiān)聽器 this.addMouseListener(butt);//給要繪畫的面板添加鼠標(biāo)監(jiān)聽器 this.addMouseMotionListener(butt);//給要繪制的面板添加鼠標(biāo)監(jiān)聽器 shape=butt.get();//將監(jiān)聽器內(nèi)保存的圖形保存到此類的全局變量中}public void paint(Graphics g) { super.paint(g);//父類的繪畫方法 for(int i=0;i<shape.length;i++) { if(shape[i]!=null) { shape[i].drawshape(g);//圖形的繪畫 } }}}

監(jiān)聽器方法的重寫:

首先是點擊按鈕監(jiān)聽方法的重寫:獲取按鈕上的字符串,如果是空字符串則將監(jiān)聽器內(nèi)的畫筆顏色設(shè)置為按鈕顏色,如果是繪圖方法的字符串(用于以下的監(jiān)聽方法中判斷執(zhí)行繪畫方法),并將全局變量i重置為0(在切換畫圖方法時可重置數(shù)據(jù))。

畫線方法:若字符串為畫線,則在鼠標(biāo)按壓監(jiān)聽方法中獲取鼠標(biāo)按壓下的坐標(biāo)點x,y并賦值給全局變量x1,y1;在鼠標(biāo)釋放監(jiān)聽方法中獲取鼠標(biāo)釋放的坐標(biāo)點x,y并賦值給全局變量x2,y2。再用畫筆對象調(diào)用畫線方法,將x1,y1,x2,y2參數(shù)傳入畫出線段。最后保存畫圖形狀,x1,y1,x2,y2和畫筆顏色的數(shù)據(jù)到Shape類中的shape數(shù)組。(Shape類在后面說明)。

畫三角形方法:若字符串為畫三角形,且全局變量i=0(判斷是否為畫三角形的第一步),則在鼠標(biāo)按壓監(jiān)聽方法中獲取鼠標(biāo)按壓下的坐標(biāo)點x,y并賦值給全局變量x1,y1;在鼠標(biāo)釋放監(jiān)聽方法中獲取鼠標(biāo)釋放的坐標(biāo)點x,y并賦值給全局變量x2,y2。再用畫筆對象調(diào)用畫線方法,將x1,y1,x2,y2參數(shù)傳入畫出線段同時將i++(避免之后的點擊動作重置x1,y1和x2,y2)。接著在鼠標(biāo)點擊方法中獲取鼠標(biāo)點擊的坐標(biāo)點x,y并賦值給全局變量x3,y3,再用畫筆對象調(diào)用畫線方法,分別畫出該點與線段兩個端點的連線,再將i重置為0(為畫下一個三角形做準(zhǔn)備)。最后再保存圖形的相應(yīng)數(shù)據(jù)到shape數(shù)組。

畫矩形方法:若字符串為畫矩形,則在鼠標(biāo)按壓監(jiān)聽方法中獲取鼠標(biāo)按壓下的坐標(biāo)點x,y并賦值給全局變量x1,y1;在鼠標(biāo)釋放監(jiān)聽方法中獲取鼠標(biāo)釋放的坐標(biāo)點x,y并賦值給全局變量x2,y2。再用畫筆對象調(diào)用畫矩形方法,傳入?yún)?shù)x1,x2中較小的數(shù),y1,y2中較小的數(shù)(較小的數(shù)作為矩形的左上方點的坐標(biāo)),x1-x2的絕對值(矩形長度),y1-y2的絕對值(矩形高度)。最后再保存圖形的相應(yīng)數(shù)據(jù)到shape數(shù)組。

畫多邊形方法:若字符串為畫多邊形,且全局變量i=0(判斷是否為畫多邊形的第一步),則在鼠標(biāo)按壓監(jiān)聽方法中獲取鼠標(biāo)按壓下的坐標(biāo)點x,y并賦值給全局變量x1,y1;在鼠標(biāo)釋放監(jiān)聽方法中獲取鼠標(biāo)釋放的坐標(biāo)點x,y并賦值給全局變量x2,y2。再用畫筆對象調(diào)用畫線方法,將x1,y1,x2,y2參數(shù)傳入畫出線段并保存這條線段的數(shù)據(jù)同時將i++(避免之后的點擊動作重置x1,y1和x2,y2)。接著在鼠標(biāo)點擊方法中獲取鼠標(biāo)點擊的坐標(biāo)點x,y并賦值給全局變量x3,y3,再用畫筆對象調(diào)用畫線方法,畫出x2,y2與x3,y3的連線同時保存這條線段的數(shù)據(jù),接著將x3,y3賦值給x2,y2(為畫下一條連線做準(zhǔn)備)。同時設(shè)置若雙擊則將此點和x1,y1連接并保存這條線段的數(shù)據(jù),最后再將i重置為0(為畫下一個多邊形做準(zhǔn)備)。

畫曲線方法:若字符串為畫曲線,則在鼠標(biāo)按壓監(jiān)聽方法中獲取鼠標(biāo)按壓下的坐標(biāo)點x,y并賦值給全局變量x1,y1,再在鼠標(biāo)拖拽方法中獲取鼠標(biāo)所在點的坐標(biāo)x2,y2,并用畫筆對象調(diào)用畫線方法,將x1,y1,x2,y2參數(shù)傳入畫出線段同時保存這條線段的數(shù)據(jù)。再將x2,y2賦值給x1,y1。

最后再添加獲取面板畫筆的方法和返回shape數(shù)組的方法(在外部使用)。

package draw0924;import java.awt.Color;import java.awt.Graphics;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 javax.swing.JButton;public class Listener implements ActionListener,MouseListener,MouseMotionListener{ private Graphics g;int x1,y1,x2,y2,x3,y3,i=0,j=0;String str;Shape[] shape=new Shape[10000]; public Shape[] get() { return shape;//返回保存的圖形數(shù)組 } public void setg(Graphics g) { this.g=g;//獲取外部畫筆 } public void actionPerformed(ActionEvent e) { if(''.equals(e.getActionCommand())) { JButton jb=(JButton)e.getSource(); Color color=jb.getBackground(); g.setColor(color);//若為顏色按鈕則設(shè)置畫筆顏色 } else { str=e.getActionCommand();//若為繪畫方法按鈕則獲取按鈕上字符串 i=0;//切換繪畫方法時重置數(shù)據(jù) } } @Override public void mouseDragged(MouseEvent e) { if(str=='畫曲線') { x2=e.getX(); y2=e.getY(); g.drawLine(x1,y1,x2,y2); shape[j++]=new Shape('畫曲線',x1,y1,x2,y2,0,0,g.getColor()); x1=x2; y1=y2; } } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseClicked(MouseEvent e) { if('畫三角形'==str) { x3=e.getX(); y3=e.getY(); g.drawLine(x1, y1, x3, y3); g.drawLine(x2, y2, x3, y3); i=0;//為畫下一個三角形做準(zhǔn)備 shape[j++]=new Shape('畫三角形',x1,y1,x2,y2,x3,y3,g.getColor()); } if('畫多邊形'==str) { x3=e.getX(); y3=e.getY(); g.drawLine(x3, y3, x2, y2); shape[j++]=new Shape('畫多邊形',x2,y2,x3,y3,0,0,g.getColor()); x2=x3; y2=y3; if(e.getClickCount()==2) { g.drawLine(x1, y1, x2, y2); shape[j++]=new Shape('畫多邊形',x1,y1,x2,y2,0,0,g.getColor()); i=0;//為畫下一個多邊形做準(zhǔn)備 } } } @Override public void mousePressed(MouseEvent e) { if('畫線'==str) { x1=e.getX(); y1=e.getY(); } if('畫三角形'==str) { //判斷為畫三角形的第一步 if(i==0) { x1=e.getX(); y1=e.getY(); } } if('畫矩形'==str) { x1=e.getX(); y1=e.getY(); } if('畫多邊形'==str) { //判斷為畫多邊形的第一步 if(i==0) { x1=e.getX(); y1=e.getY(); } } if('畫曲線'==str) { x1=e.getX(); y1=e.getY(); } } @Override public void mouseReleased(MouseEvent e) { if('畫線'==str) { x2=e.getX(); y2=e.getY(); g.drawLine(x1,y1,x2,y2); shape[j++]=new Shape('畫線',x1,y1,x2,y2,0,0,g.getColor()); } if('畫三角形'==str) { //判斷為畫三角形的第一步 if(i==0) { x2=e.getX(); y2=e.getY(); g.drawLine(x1,y1,x2,y2); i++;//避免在點擊時重置已有的坐標(biāo)值 } } if('畫矩形'==str) { x2=e.getX(); y2=e.getY(); g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); shape[j++]=new Shape('畫矩形',x1,y1,x2,y2,0,0,g.getColor()); } if('畫多邊形'==str) { //判斷為畫多邊形的第一步 if(i==0) { x2=e.getX(); y2=e.getY(); g.drawLine(x1,y1,x2,y2); i++;//避免在點擊時重置已有的坐標(biāo)值 shape[j++]=new Shape('畫多邊形',x1,y1,x2,y2,0,0,g.getColor()); } } } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub }}

創(chuàng)建Shape類保存圖形的形狀,大小和顏色等各項數(shù)據(jù)。

package draw0924;import java.awt.Color;import java.awt.Graphics;public class Shape { private String name; private int x1,y1,x2,y2,x3,y3; private Color m; public Shape(String name,int x1,int y1,int x2,int y2,int x3,int y3,Color m) { this.name=name; this.x1=x1; this.x2=x2; this.y1=y1; this.y2=y2; this.x3=x3; this.y3=y3; this.m=m; } public void drawshape(Graphics g) { g.setColor(m); switch(name) { case '畫線': g.drawLine(x1,y1, x2, y2); break; case '畫三角形': g.drawLine(x1, y1, x2, y2); g.drawLine(x1, y1, x3, y3); g.drawLine(x3, y3, x2, y2); break; case '畫矩形': g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); break; case '畫多邊形': g.drawLine(x1,y1, x2, y2); break; case '畫曲線': g.drawLine(x1,y1, x2, y2); break; } }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩高清中文字幕一区二区| 美女精品在线观看| 999精品一区| 久久久久久久久久久9不雅视频| 国产精品亚洲欧美一级在线| 亚洲精品欧洲| 亚洲人www| 欧美亚洲色图校园春色| 日本天堂一区| 国产精品v日韩精品v欧美精品网站 | 日韩不卡一区二区| 中文字幕日本一区二区| 亚洲精品国产精品粉嫩| 麻豆亚洲精品| 日韩国产欧美三级| 日韩和欧美一区二区三区| 久久国际精品| 亚洲深夜视频| 国产综合亚洲精品一区二| 午夜欧美精品久久久久久久| 亚洲一本视频| 国产精品日本| 美女视频网站久久| 精品国产免费人成网站| 久久高清国产| 久久97视频| 激情综合网址| 国产探花一区二区| 成人午夜网址| 伊人久久一区| 特黄毛片在线观看| 亚洲精品精选| 日产精品一区| 日韩午夜视频在线| 国产一区二区三区91| 伊人久久在线| 欧美专区一区二区三区| 国产欧美日韩一区二区三区在线| 91综合视频| 99视频精品| 国产欧美自拍| 午夜国产精品视频| 日本aⅴ亚洲精品中文乱码| 欧美69视频| 国产精品中文字幕亚洲欧美 | 美女国产一区二区三区| 激情久久久久久| 亚洲三级精品| 老色鬼精品视频在线观看播放| 中国女人久久久| 国产精品视频一区视频二区| 欧美 日韩 国产一区二区在线视频 | 综合干狼人综合首页| 99久久九九| 欧美亚洲专区| 中文字幕亚洲在线观看| 亚洲国产不卡| 国产精品久久久久久久久久白浆 | 黄色网一区二区| 日韩精品一卡二卡三卡四卡无卡| 国产精品一区二区三区av| 日韩在线观看一区二区| 久久久久久一区二区| 色婷婷成人网| 亚洲免费网址| 激情久久一区二区| 国产亚洲观看| 亚洲a成人v| 久久久久久美女精品| 精品久久一区| 国产一区二区视频在线看| 日韩av一区二区在线影视| 亚洲精选成人| 日韩欧美久久| 日韩精品国产精品| 亚洲精品免费观看| 国产99久久久国产精品成人免费| 日韩av中文在线观看| 爽好多水快深点欧美视频| 99精品网站| 国产一区亚洲| 视频一区视频二区中文字幕| 先锋亚洲精品| 日本不卡高清| 久久精品伊人| 在线天堂中文资源最新版| 成人午夜亚洲| 欧美日韩第一| 激情婷婷欧美| 亚洲人亚洲人色久| 在线亚洲一区| 视频一区日韩精品| 日韩va亚洲va欧美va久久| 亚洲制服一区| 麻豆久久一区| 蜜臀91精品国产高清在线观看| 久久精品1区| 亚州欧美在线| 日韩电影免费网址| 99精品99| а√天堂8资源在线| 久久av一区| 欧美激情在线精品一区二区三区| 伊伊综合在线| 日韩欧美2区| 精品国产一区二| 国产精品老牛| 久久中文字幕一区二区三区| 久久精品欧美一区| 欧美精品99| 一区二区亚洲视频| 水蜜桃久久夜色精品一区| 亚洲小说春色综合另类电影| 福利在线免费视频| 日韩av一区二区在线影视| 婷婷综合亚洲| 91嫩草亚洲精品| 日日夜夜免费精品| 91精品久久久久久久久久不卡| 国产日韩一区二区三区在线播放| 国产麻豆久久| 久久精品三级| 亚洲免费专区| 久久国产电影| 超碰99在线| 精品入口麻豆88视频| 日韩一区二区三区免费视频 | 美女精品视频在线| 欧美日韩一区自拍| 999在线观看精品免费不卡网站| 国产不卡人人| 欧美三级网址| 麻豆91小视频| 麻豆国产一区| 欧美激情网址| 日韩精品免费观看视频| 免费精品视频| 亚洲欧美日韩在线观看a三区 | 欧美成人基地| 97人人精品| 日韩三区在线| 美女久久久久| 久久高清免费| 欧美日韩四区| 视频一区免费在线观看| 日韩欧美二区| 成人久久一区| 欧美13videosex性极品| 国产精品对白| 精品日韩在线| 激情婷婷综合| 日韩av一区二区三区四区| 午夜亚洲福利| 福利视频一区| 免费不卡中文字幕在线| 伊人成人网在线看| 亚洲午夜免费| 高清av一区| 尹人成人综合网| 日韩美女国产精品| 老鸭窝一区二区久久精品| 国产精久久久| 久久99久久久精品欧美| 99精品小视频| 免费日韩视频| 美女高潮久久久| 国产模特精品视频久久久久| 美日韩一区二区三区| av资源亚洲| 亚洲精品乱码久久久久久蜜桃麻豆| 国产成人精品一区二区三区免费| 综合日韩av| 日韩福利视频导航| 久久九九精品| 综合激情视频| 亚洲精品**中文毛片| 日本伊人午夜精品| 欧美激情一区| 日韩影院免费视频| 激情视频一区二区三区| 国产一区二区三区四区二区| 国产视频一区免费看| 精品视频91| 欧美日韩午夜| 婷婷六月综合| 国内自拍视频一区二区三区| 91精品日本| 免播放器亚洲一区| 欧美好骚综合网| 国产极品嫩模在线观看91精品| 石原莉奈一区二区三区在线观看| 久久成人福利| 日av在线不卡| 性欧美69xoxoxoxo| 国际精品欧美精品| 欧美日韩一区二区国产 | 国产精品7m凸凹视频分类| 精品一区二区三区的国产在线观看| 日本天堂一区| 亚洲三级精品|