java基于GUI實現(xiàn)簡單畫筆小畫板
在一塊畫板上實現(xiàn)鼠標點擊畫圖案的功能(本文未實現(xiàn)拖動劃線功能),供大家參考,具體內(nèi)容如下
思路
與java設(shè)計GUI的大體思路一致, 先設(shè)置Frame類作為框架, 其中添加組件類作為功能補充. 該設(shè)計中需要設(shè)置鼠標監(jiān)聽類, 給frame加上組件
this.addMouseListener(new MyMouseListener());
并自己實現(xiàn)一個監(jiān)聽類, implements需要重寫所有方法, 所以使用適配器
private class MyMouseListener extends MouseAdapter
給全局一個points數(shù)組變量, 保存所有點擊的點的信息, 然后重寫frame類的paint方法時改成迭代器依次畫數(shù)組中的點
@Override ? ? public void paint(Graphics g) { ? ? ? ? // paint listen on mouse event ? ? ? ? Iterator iterator = points.iterator(); ? ? ? ? while (iterator.hasNext()){ ? ? ? ? ? ? Point point = (Point) iterator.next(); ? ? ? ? ? ? g.setColor(Color.GREEN); ? ? ? ? ? ? g.fillOval(point.x, point.y, 10, 10); ? ? ? ? } ? ? }
完整代碼
import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Iterator; public class testmousepaint { ? ? public static void main(String[] args) { ? ? ? ? MyFrame myFrame = new MyFrame("IDEA"); ? ? } } class MyFrame extends Frame{ ? ? ArrayList points; ? ? public MyFrame(String title) { ? ? ? ? super(title); ? ? ? ? setBounds(200, 200, 400, 400); ? ? ? ? this.addMouseListener(new MyMouseListener()); ? ? ? ? setVisible(true); ? ? ? ? setBounds(200,200,400,400); ? ? ? ? setBackground(Color.white); ? ? ? ? points = new ArrayList<>(); ? ? } ? ? @Override ? ? public void paint(Graphics g) { ? ? ? ? // paint listen on mouse event ? ? ? ? Iterator iterator = points.iterator(); ? ? ? ? while (iterator.hasNext()){ ? ? ? ? ? ? Point point = (Point) iterator.next(); ? ? ? ? ? ? g.setColor(Color.GREEN); ? ? ? ? ? ? g.fillOval(point.x, point.y, 10, 10); ? ? ? ? } ? ? } ? ? public void addpoint(Point point){ ? ? ? ? points.add(point); ? ? } ? ? private class MyMouseListener extends MouseAdapter{ ? ? ? ? @Override ? ? ? ? public void mousePressed(MouseEvent e) { ? ? ? ? ? ? MyFrame frame = (MyFrame) e.getSource(); ? ? ? ? ? ? frame.addpoint(new Point(e.getX(), e.getY())); ? ? ? ? ? ? // click and paint every time ? ? ? ? ? ? frame.repaint(); ? ? ? ? } ? ? } }
實現(xiàn)效果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SSH框架網(wǎng)上商城項目第24戰(zhàn)之Struts2中處理多個Model請求的方法
這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第24戰(zhàn)之Struts2中處理多個Model請求的方法,感興趣的小伙伴們可以參考一下2016-06-06multi-catch和try-catch異常處理知識點詳解
在本篇文章里我們給大家分享了一篇關(guān)于multi-catch和try-catch異常處理知識點內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-11-11淺談java二進制、十進制、十六進制、字符串之間的相互轉(zhuǎn)換
下面小編就為大家?guī)硪黄獪\談二進制、十進制、十六進制、字符串之間的相互轉(zhuǎn)換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考,一起跟隨小編過來看看吧2016-06-06