?? handdraw.java
字號:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
/**
* Description:
* <br/>Copyright (C), 2005-2008, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class HandDraw
{
//畫圖區(qū)的寬度
private final int AREA_WIDTH = 500;
//畫圖區(qū)的高度
private final int AREA_HEIGHT = 400;
//下面的preX、preY保存了上一次鼠標(biāo)拖動事件的鼠標(biāo)座標(biāo)
private int preX = -1;
private int preY = -1;
//定義一個右鍵菜單用于設(shè)置畫筆顏色
JPopupMenu pop = new JPopupMenu();
JMenuItem chooseColor = new JMenuItem("選擇顏色");
//定義一個BufferedImage對象
BufferedImage image = new BufferedImage(AREA_WIDTH , AREA_HEIGHT ,
BufferedImage.TYPE_INT_RGB);
//獲取image對象的Graphics
Graphics g = image.getGraphics();
private JFrame f = new JFrame("簡單手繪程序");
private DrawCanvas drawArea = new DrawCanvas();
//用于保存需要繪制什么圖形的字符串屬性
private String shape = "";
//用于保存畫筆顏色
private Color foreColor = new Color(255, 0 ,0);
public void init()
{
chooseColor.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
//下面代碼直接彈出一個模式的顏色選擇器對話框,并返回用戶選擇的顏色
//foreColor = JColorChooser.showDialog(f , "選擇畫筆顏色" , foreColor);
//下面代碼則可以彈出一個非模式的顏色選擇對話框,
//并可以分別為“確定”按鈕、“取消”按鈕指定事件監(jiān)聽器
final JColorChooser colorPane = new JColorChooser(foreColor);
JDialog jd = JColorChooser.createDialog(f ,"選擇畫筆顏色",false,
colorPane, new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
foreColor = colorPane.getColor();
}
}, null);
jd.setVisible(true);
}
});
//將菜單項組合成右鍵菜單
pop.add(chooseColor);
//將右鍵菜單添加到drawArea對象中
drawArea.setComponentPopupMenu(pop);
//將image對象的背景色填充成白色
g.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);
drawArea.setPreferredSize(new Dimension(AREA_WIDTH , AREA_HEIGHT));
//監(jiān)聽鼠標(biāo)移動動作
drawArea.addMouseMotionListener(new MouseMotionAdapter()
{
//實現(xiàn)按下鼠標(biāo)鍵并拖動的事件處理器
public void mouseDragged(MouseEvent e)
{
//如果preX和preY大于0
if (preX > 0 && preY > 0)
{
//設(shè)置當(dāng)前顏色
g.setColor(foreColor);
//繪制從上一次鼠標(biāo)拖動事件點到本次鼠標(biāo)拖動事件點的線段
g.drawLine(preX , preY , e.getX() , e.getY());
}
//將當(dāng)前鼠標(biāo)事件點的X、Y座標(biāo)保存起來
preX = e.getX();
preY = e.getY();
//重繪drawArea對象
drawArea.repaint();
}
});
//監(jiān)聽鼠標(biāo)事件
drawArea.addMouseListener(new MouseAdapter()
{
//實現(xiàn)鼠標(biāo)松開的事件處理器
public void mouseReleased(MouseEvent e)
{
//松開鼠標(biāo)鍵時,把上一次鼠標(biāo)拖動事件的X、Y座標(biāo)設(shè)為-1。
preX = -1;
preY = -1;
}
});
f.add(drawArea);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new HandDraw().init();
}
//讓畫圖區(qū)域繼承JPanel類
class DrawCanvas extends JPanel
{
//重寫JPanel的paint方法,實現(xiàn)繪畫
public void paint(Graphics g)
{
//將image繪制到該組件上
g.drawImage(image , 0 , 0 , null);
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -