Java實(shí)現(xiàn)簡易畫圖板
本文實(shí)例為大家分享了Java實(shí)現(xiàn)簡易畫圖板的具體代碼,供大家參考,具體內(nèi)容如下
這是Windows系統(tǒng)自帶的畫圖板,我們就是模仿著用Java去寫一個(gè)簡易版的畫圖板。
效果圖
圖中的四個(gè)顏色按鈕是可以配合要畫的圖形而改變線條顏色的,而且每次打開顏色按鈕的顏色都是隨機(jī)的。目前畫圖什么的都沒什么問題,只是一些細(xì)節(jié)沒有去完全修復(fù)了,但不影響使用,再加上近段時(shí)間有點(diǎn)太忙,就沒有去完善相關(guān)細(xì)節(jié)了,有興趣的小伙伴可以評(píng)論區(qū)幫忙提出指正意見哈。
畫圖板UI界面代碼
import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import java.awt.Graphics; import java.util.Random; public class DrawGraphics { ?? ?Random rand=new Random(); ?? ? public static void main(String []args){ ?? ??? ?DrawGraphics draw=new DrawGraphics(); ?? ??? ?draw.displayUI(); ?? ? } ?? ?public JButton getButton(String s,DrawListener dl,boolean flag){ ?? ??? ?JButton btn=new JButton(); ?? ??? ?//每個(gè)按鈕的尺寸 ?? ??? ?Dimension dim=new Dimension(200,50); ?? ??? ?//如果flag為true,創(chuàng)建文字按鈕,否則創(chuàng)建顏色按鈕 ? ? ? ? if(flag){ ? ? ? ? ?? ?btn=new JButton(s); ? ? ? ? } ? ? ? ? else{ ? ? ? ? ?? ?Color c= new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256)); ? ? ? ? ?? ?btn.setBackground(c); ? ? ? ? } ? ? ? ? btn.setPreferredSize(dim); ? ? ? ? btn.addActionListener(dl); ?? ??? ?return btn; ?? ?} ?? ? ?? ?public void displayUI(){ ?? ??? ?JFrame frame=new JFrame(); ?? ??? ?FlowLayout f1=new FlowLayout(); ?? ??? ? ?? ??? ?frame.setTitle("畫圖板"); ?? ??? ?frame.setSize(1000,1000); ?? ??? ?frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ?? ??? ?frame.setLocationRelativeTo(null); ?? ??? ?frame.setLayout(f1); ?? ??? ?frame.setResizable(false); ?? ??? ? ?? ??? ?DrawListener dl=new DrawListener(); ?? ??? ? ?? ??? ?String []name={"直線","矩形","圓","三角形"}; ?? ??? ?for(int i=0;i<name.length;i++){ ?? ??? ??? ? ?? ??? ??? ?frame.add(getButton(name[i],dl,true)); ?? ??? ?} ?? ??? ?for(int i=0;i<name.length;i++){ ?? ??? ??? ?frame.add(getButton("",dl,false)); ?? ??? ?} ?? ??? ? ?? ??? ?frame.addMouseListener(dl); ?? ??? ?frame.setVisible(true); ?? ??? ?// 獲取畫筆 --- 必須要放在 可視化之后 ?? ??? ?Graphics g=frame.getGraphics(); ?? ??? ?dl.g=g; ?? ??? ?dl.btnstr=name[0]; ?? ??? ?dl.name=name; ?? ??? ? ?? ?} }
畫圖板UI監(jiān)聽器代碼
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import java.awt.Color; import java.awt.Graphics; public class DrawListener implements MouseListener,ActionListener{ ?? ?Graphics g; ?? ?int x1,x2,y1,y2; ?? ?int x3,x4,x5,y3,y4,y5; ?? ?int count=0; ?? ?String []name; ?? ?String btnstr; ?? ? ?? ?int i; ?? ?@Override ?? ?public void actionPerformed(ActionEvent e) { ?? ??? ?btnstr=e.getActionCommand(); ?? ??? ?if(btnstr.equals("")){ ?? ??? ??? ?JButton btn=(JButton)e.getSource(); ?? ??? ??? ?Color btnColor=btn.getBackground(); ?? ??? ??? ?g.setColor(btnColor); ?? ??? ?} ?? ??? ?else { ?? ??? ??? ?for(i=0;i<name.length;i++){ ?? ??? ??? ??? ?if(btnstr.equals(name[i]))break; ?? ??? ? ? ?}?? ? ?? ??? ?} ?? ??? ??? ??? ? ?? ?} ?? ? ?? ?@Override ?? ?public void mouseClicked(MouseEvent e) { ?? ??? ?if(btnstr.equals(name[3])||btnstr.equals("")){ ?? ??? ?g.drawOval(e.getX()-4, e.getY()-4, 8, 8); ?? ??? ?if(count==0){ ?? ??? ??? ?x3=e.getX(); ?? ??? ??? ?y3=e.getY(); ?? ??? ??? ?count++; ?? ??? ?} ?? ??? ?else if(count==1){ ?? ??? ??? ?x4=e.getX(); ?? ??? ??? ?y4=e.getY(); ?? ??? ??? ?g.drawLine(x3, y3, x4, y4); ?? ??? ??? ?count++; ?? ??? ?} ?? ??? ?else if(count==2){ ?? ??? ??? ?x5=e.getX(); ?? ??? ??? ?y5=e.getY(); ?? ??? ??? ?g.drawLine(x3, y3, x5, y5); ?? ??? ??? ?g.drawLine(x4, y4, x5, y5); ?? ??? ??? ?count=0; ?? ??? ?} ?? ??? ?}?? ??? ? ?? ?} ?? ?@Override ?? ?public void mousePressed(MouseEvent e) { ?? ??? ?// TODO Auto-generated method stub ?? ??? ?x1=e.getX(); ?? ??? ?y1=e.getY(); ?? ?} ?? ?@Override ?? ?public void mouseReleased(MouseEvent e) { ?? ??? ?// TODO Auto-generated method stub ?? ??? ? ?? ??? ?x2=e.getX(); ?? ??? ?y2=e.getY(); ?? ??? ?if(btnstr.equals(name[0])||btnstr.equals("")){ ?? ??? ??? ?g.drawLine(x1, y1, x2, y2); ?? ??? ?} ?? ??? ?else if(btnstr.equals(name[1])||btnstr.equals("")){ ?? ??? ??? ?g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2)); ?? ??? ?} ?? ??? ?else if(btnstr.equals(name[2])||btnstr.equals("")){ ?? ??? ??? ?g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2)); ?? ??? ?} ?? ? ? ? ?? ?} ?? ?@Override ?? ?public void mouseEntered(MouseEvent e) { ?? ??? ?// TODO Auto-generated method stub ?? ??? ? ?? ?} ?? ?@Override ?? ?public void mouseExited(MouseEvent e) { ?? ??? ?// TODO Auto-generated method stub ?? ??? ? ?? ?} ? ? ? ? }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)簡易飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡易飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05spring中JdbcTemplate操作oracle的存儲(chǔ)過程實(shí)例代碼
JdbcTemplate是Spring對(duì)JDBC的封裝,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分,下面這篇文章主要給大家介紹了關(guān)于spring中JdbcTemplate操作oracle的存儲(chǔ)過程的相關(guān)資料,需要的朋友可以參考下2023-04-04使用feign發(fā)送http請(qǐng)求解析報(bào)錯(cuò)的問題
這篇文章主要介紹了使用feign發(fā)送http請(qǐng)求解析報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象示例詳解
這篇文章主要給大家介紹了關(guān)于MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Java中List for循環(huán)的6種寫法總結(jié)(推薦)
下面小編就為大家?guī)硪黄狫ava中List for循環(huán)的6種寫法總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06如何自定義feign調(diào)用實(shí)現(xiàn)hystrix超時(shí)、異常熔斷
這篇文章主要介紹了自定義feign調(diào)用實(shí)現(xiàn)hystrix超時(shí)、異常熔斷的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Spring Boot2配置Swagger2生成API接口文檔詳情
這篇文章主要介紹了Spring Boot2配置Swagger2生成API接口文檔詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09