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

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

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

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

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

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

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

畫圖方法的編寫:

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

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

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

創(chuàng)建字符串?dāng)?shù)組存放畫圖形狀的名稱,接著使用for循環(huán),將字符串添加到各個(gè)按鈕上,再將按鈕添加到面板對(duì)象中,最后再給按鈕加上按鈕監(jiān)聽器;接著再創(chuàng)建顏色類的數(shù)組存放各種顏色,同樣使用for循環(huán),將顏色設(shè)置成按鈕的背景色,再將按鈕添加到邊框布局上方的面板對(duì)象中,再給按鈕添加監(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)建一個(gè)面板對(duì)象 panel.setBackground(Color.GREEN); jf.add(panel,BorderLayout.NORTH);//添加到邊框布局的上方 Listener butt=new Listener();//創(chuàng)建監(jiān)聽器類,并創(chuàng)建一個(gè)監(jiān)聽器對(duì)象 String[] str= {'畫線','畫三角形','畫矩形','畫多邊形','畫曲線'};//創(chuàng)建字符串?dāng)?shù)組存儲(chǔ)按鈕文字 for(int i=0;i<str.length;i++) { JButton jbu=new JButton(str[i]);//創(chuàng)建按鈕對(duì)象并把按鈕文字添加上 panel.add(jbu);//將按鈕添加到面板對(duì)象上 jbu.addActionListener(butt);//給按鈕添加監(jiān)聽器 } Color[] color= {Color.RED,Color.BLUE,new Color(104,150,144)};//創(chuàng)建顏色數(shù)組存儲(chǔ)畫筆顏色 for(int i=0;i<color.length;i++) { JButton jbu=new JButton();//創(chuàng)建按鈕對(duì)象 jbu.setBackground(color[i]);//將按鈕背景設(shè)置顏色 panel.add(jbu);//將按鈕添加到面板對(duì)象上 jbu.setPreferredSize(new Dimension(30,30));//設(shè)置按鈕大小 jbu.addActionListener(butt);//給按鈕添加監(jiān)聽器 } this.setBackground(Color.WHITE);//將繼承來(lái)的面板設(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)聽器方法的重寫:

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

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

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

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

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

畫曲線方法:若字符串為畫曲線,則在鼠標(biāo)按壓監(jiān)聽方法中獲取鼠標(biāo)按壓下的坐標(biāo)點(diǎn)x,y并賦值給全局變量x1,y1,再在鼠標(biāo)拖拽方法中獲取鼠標(biāo)所在點(diǎn)的坐標(biāo)x2,y2,并用畫筆對(duì)象調(diào)用畫線方法,將x1,y1,x2,y2參數(shù)傳入畫出線段同時(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í)重置數(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;//為畫下一個(gè)三角形做準(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;//為畫下一個(gè)多邊形做準(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++;//避免在點(diǎn)擊時(shí)重置已有的坐標(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++;//避免在點(diǎn)擊時(shí)重置已有的坐標(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類保存圖形的形狀,大小和顏色等各項(xiàng)數(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; } }}

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品777777在线播放| 亚洲网站视频| 亚洲视频电影在线| 亚洲精一区二区三区| 日韩精品一区二区三区中文字幕| 亚洲欧美在线综合| 国产区精品区| 久久精品97| 国产一区二区三区四区二区| 国产美女高潮在线| 好看的亚洲午夜视频在线| 蜜臀久久99精品久久久久久9| 日日摸夜夜添夜夜添国产精品| 国产乱码精品一区二区三区四区 | 国内精品福利| 蜜臀av国产精品久久久久| 日韩成人午夜精品| 精品国产午夜肉伦伦影院| 日韩和的一区二在线| 99精品小视频| 亚洲精品欧美| 精品视频一二| 9久re热视频在线精品| 青草综合视频| 日韩欧美二区| 男女性色大片免费观看一区二区| 日本aⅴ精品一区二区三区 | 一区二区视频欧美| 国产精品一区二区av交换 | 精品视频国内| 日韩一级不卡| 精品久久91| 国产亚洲亚洲| 国产剧情在线观看一区| 久久中文亚洲字幕| 国产一级成人av| 久久精品高清| 国产精品麻豆成人av电影艾秋 | 国产一区福利| 中文字幕日韩亚洲| av资源亚洲| 中文字幕日韩高清在线| 麻豆成人av在线| 在线国产一区二区| 久久精品一本| 综合欧美亚洲| 国产99久久| 久久99影视| 视频一区在线播放| 日韩欧美午夜| 国产精久久久| 国产精品视区| 国产伦久视频在线观看| 蜜桃视频在线观看一区二区| 日韩88av| 欧美亚洲一区二区三区| 91超碰国产精品| 久久99久久人婷婷精品综合| 99成人在线| 98精品视频| 国产伦精品一区二区三区视频 | 欧美日韩第一| 国产不卡av一区二区| 日韩一区二区三区高清在线观看| 神马午夜久久| 久久精品资源| 久久精品超碰| 99riav1国产精品视频| 国产欧美一区二区三区精品酒店 | 日韩欧美美女在线观看| 午夜国产精品视频免费体验区| 精品丝袜久久| 国产精品亚洲人成在99www| 视频一区二区三区中文字幕| 人人精品亚洲| 成人台湾亚洲精品一区二区| 国产日韩一区| 欧美在线不卡| 日韩国产在线一| 亚洲三级av| 热久久国产精品| 好吊日精品视频| 色爱综合av| 久久精品国内一区二区三区水蜜桃| 国产成人精品亚洲线观看 | 9国产精品视频| 激情综合网站| 亚洲性色视频| 韩日一区二区三区| 91成人超碰| 99国产精品久久久久久久| 九一精品国产| 黄色亚洲大片免费在线观看| 美女网站视频一区| 999久久久免费精品国产| 久久狠狠婷婷| 日韩国产欧美| 丝袜美腿诱惑一区二区三区 | 欧美另类综合| 亚洲一区国产| 免费观看日韩电影| 日韩av字幕| 国产情侣一区在线| 久久精品超碰| 久久97视频| 亚洲一级少妇| 欧洲激情综合| 老鸭窝毛片一区二区三区| 在线视频亚洲欧美中文| 亚洲资源在线| 欧美日韩xxxx| 久久亚洲资源中文字| av资源新版天堂在线| 99久久99视频只有精品| 99精品99| 日韩精品三区四区| 国产精品视频一区二区三区| 精品国产乱码久久久久久1区2匹| 精品淫伦v久久水蜜桃| 国产精品精品国产一区二区| 亚洲二区视频| 在线免费观看亚洲| 国产精品美女在线观看直播| 成人在线免费观看网站| 欧美.日韩.国产.一区.二区| 视频一区国产视频| 国产亚洲高清在线观看| 国产+成+人+亚洲欧洲在线| 婷婷成人综合| 中文字幕一区二区精品区| 久久99精品久久久野外观看| 欧美日韩免费看片| 蜜桃一区二区三区在线| 91精品国产经典在线观看| 国产精品夜夜夜| 午夜欧美巨大性欧美巨大| 蜜臀久久99精品久久久画质超高清| 欧美日韩va| 久久久久99| 日韩欧美中文字幕电影| 91亚洲国产| 鲁大师成人一区二区三区| 国产精品videosex极品| 美女少妇全过程你懂的久久| 日韩精品一页| 欧美sm一区| 日韩精品社区| 国产91精品对白在线播放| 婷婷视频一区二区三区| 久久久久久网| 亚洲网址在线观看| 麻豆国产91在线播放| 欧美资源在线| 国产66精品| 婷婷视频一区二区三区| 日韩国产激情| 69堂精品视频在线播放| 不卡在线一区二区| 精品亚洲a∨一区二区三区18| 亚洲一区二区免费看| 国产一区不卡| 日本精品在线播放| 女人天堂亚洲aⅴ在线观看| 久久精品一区二区三区中文字幕| 欧美中文一区二区| 美腿丝袜在线亚洲一区| 免费看的黄色欧美网站| 成人三级高清视频在线看| 日本一区二区三区中文字幕| 亚洲福利一区| 福利在线一区| 国产日韩一区| 免费在线观看精品| 99久久亚洲精品| 久久精品国产网站| 日韩毛片网站| 午夜亚洲一区| 国产综合婷婷| 高潮一区二区| 国产情侣一区在线| 亚洲小说春色综合另类电影| 久久国产亚洲| 国产美女高潮在线| 国产精品3区| 欧美在线不卡| 一区二区三区网站| 尹人成人综合网| 亚洲国产影院| www成人在线视频| 福利一区二区| 成人午夜亚洲| 国产一区二区三区成人欧美日韩在线观看| 日韩成人在线看| 香蕉久久一区| 中文字幕一区日韩精品| 国产精品日本| 免费欧美日韩| 欧美专区一区二区三区| 中文日韩在线| 99亚洲精品|