?? handdraw.java
字號:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
/**
* 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
{
//畫圖區的寬度
private final int AREA_WIDTH = 500;
//畫圖區的高度
private final int AREA_HEIGHT = 400;
//下面的preX、preY保存了上一次鼠標拖動事件的鼠標座標
private int preX = -1;
private int preY = -1;
//定義一個右鍵菜單用于設置畫筆顏色
PopupMenu pop = new PopupMenu();
MenuItem redItem = new MenuItem("紅色");
MenuItem greenItem = new MenuItem("綠色");
MenuItem blueItem = new MenuItem("藍色");
//定義一個BufferedImage對象
BufferedImage image = new BufferedImage(AREA_WIDTH , AREA_HEIGHT ,
BufferedImage.TYPE_INT_RGB);
//獲取image對象的Graphics
Graphics g = image.getGraphics();
private Frame f = new Frame("簡單手繪程序");
private DrawCanvas drawArea = new DrawCanvas();
//用于保存需要繪制什么圖形的字符串屬性
private String shape = "";
//用于保存畫筆顏色
private Color foreColor = new Color(255, 0 ,0);
public void init()
{
//定義右鍵菜單的事件監聽器。
ActionListener menuListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("綠色"))
{
foreColor = new Color(0 , 255 , 0);
}
if (e.getActionCommand().equals("紅色"))
{
foreColor = new Color(255 , 0 , 0);
}
if (e.getActionCommand().equals("藍色"))
{
foreColor = new Color(0 , 0 , 255);
}
}
};
//為三個菜單添加事件監聽器
redItem.addActionListener(menuListener);
greenItem.addActionListener(menuListener);
blueItem.addActionListener(menuListener);
//將菜單項組合成右鍵菜單
pop.add(redItem);
pop.add(greenItem);
pop.add(blueItem);
//將右鍵菜單添加到drawArea對象中
drawArea.add(pop);
//將image對象的背景色填充成白色
g.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);
drawArea.setPreferredSize(new Dimension(AREA_WIDTH , AREA_HEIGHT));
//監聽鼠標移動動作
drawArea.addMouseMotionListener(new MouseMotionAdapter()
{
//實現按下鼠標鍵并拖動的事件處理器
public void mouseDragged(MouseEvent e)
{
//如果preX和preY大于0
if (preX > 0 && preY > 0)
{
//設置當前顏色
g.setColor(foreColor);
//繪制從上一次鼠標拖動事件點到本次鼠標拖動事件點的線段
g.drawLine(preX , preY , e.getX() , e.getY());
}
//將當前鼠標事件點的X、Y座標保存起來
preX = e.getX();
preY = e.getY();
//重繪drawArea對象
drawArea.repaint();
}
});
//監聽鼠標事件
drawArea.addMouseListener(new MouseAdapter()
{
//實現鼠標松開的事件處理器
public void mouseReleased(MouseEvent e)
{
//彈出右鍵菜單
if (e.isPopupTrigger())
{
pop.show(drawArea , e.getX() , e.getY());
}
//松開鼠標鍵時,把上一次鼠標拖動事件的X、Y座標設為-1。
preX = -1;
preY = -1;
}
});
f.add(drawArea);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new HandDraw().init();
}
class DrawCanvas extends Canvas
{
//重寫Canvas的paint方法,實現繪畫
public void paint(Graphics g)
{
//將image繪制到該組件上
g.drawImage(image , 0 , 0 , null);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -