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

這是Windows系統(tǒng)自帶的畫圖板,我們就是模仿著用Java去寫一個(gè)簡(jiǎn)易版的畫圖板。
效果圖

圖中的四個(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
?? ??? ?
?? ?}
? ? ? ?
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法
這篇文章主要介紹了springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Spring實(shí)現(xiàn)自定義注解處理器解析和處理注解
這篇文章主要介紹了Spring實(shí)現(xiàn)自定義注解處理器解析和處理注解,注解在現(xiàn)代Java編程中扮演了至關(guān)重要的角色,無論是簡(jiǎn)化代碼、增強(qiáng)可讀性,還是將元數(shù)據(jù)與業(yè)務(wù)邏輯分離,注解都讓我們的代碼更加優(yōu)雅和靈活,需要的朋友可以參考下2024-10-10
java實(shí)現(xiàn)輕輕松松控制臺(tái)斗地主的示例代碼
這篇文章主要介紹了java實(shí)現(xiàn)輕輕松松控制臺(tái)斗地主,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Spring?boot?admin?服務(wù)監(jiān)控利器詳解
這篇文章主要介紹了Spring?boot?admin?服務(wù)監(jiān)控利器詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Zookeeper中如何解決zookeeper.out文件輸出位置問題
這篇文章主要介紹了Zookeeper中如何解決zookeeper.out文件輸出位置問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
詳解java集成支付寶支付接口(JSP+支付寶20160912)
本篇文章主要介紹了java集成支付寶支付接口,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
JAVA JNI原理詳細(xì)介紹及簡(jiǎn)單實(shí)例代碼
這篇文章主要介紹了JAVA JNI原理的相關(guān)資料,這里提供簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下2016-12-12

