[java]代码库
import javax.swing.*;
import java.awt.image.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;//.......................
import java.io.*;
import java.awt.dnd.*;//...................
import javax.imageio.*;//..............
import java.util.Iterator;
import java.lang.Iterable;
import java.util.List;
//JFrame(窗口)<JMenuBar(菜单条)<JMenu(菜单)<JMenuItem(菜单里的项目)
//JFrame(窗口)<JScrollPane(滚动条)<JTextArea(文件编辑面板)<JPopupMenu(右键菜单)
//JFrame(窗口)<JScrollPane(滚动条)<JLabel(标签)
//JFrame(窗口)<JPanel(板面)<JTextField(文件编辑条)
//JFrame(窗口)<JPanel(板面)<JButton(按钮)
//JFrame(窗口)<JPanel(板面)<JRadioButton(单选按钮,用ButtonGroup组合)
//JFrame(窗口)<JPanel(板面)<JCheckBox(复选框)
//JFrame(窗口)<JPanel(板面)<JComboBox(下拉选择框)
//JFrame(窗口)<Box(布局管理器)
public class HandDraw
{
//画图区的宽度
private final int AREA_WIDTH=500;
//画图区的高度
private final int AREA_HEIGHT=400;
//下面的变量保存上一次鼠标拖动事件的鼠标坐标
private int preX = -1 ;
private int preY = -1 ;
//定义右键菜单用于设置画笔颜色
JPopupMenu pop=new JPopupMenu();//右键菜单
JMenuItem chooseColor = new JMenuItem("选择颜色");
//定义 一个BufferedImage对象.......绘制位图.....................................................
//图像是先画在BufferedImage上的,再加到DrawCanvas中------------------------
BufferedImage image=new BufferedImage(AREA_WIDTH,AREA_HEIGHT,BufferedImage.TYPE_INT_RGB);
//获取image对象的Graphics(Graphics翻译:制图法、制图学、图表算法)
Graphics g=image.getGraphics();//
//..........................................................................................
private JFrame f = new JFrame("简单手绘板");
private DrawCanvas drawArea=new DrawCanvas();//画布
//用于保存画笔颜色,默认是红色
private Color foreColor = new Color(255,0,0);
//.............................................................................
public void init(){
chooseColor.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
//弹出一个非模式的颜色选择 ---对话框JDialog---
//并可以分别为“确定”按钮,“取消”按钮指定事件监听器----------------------------
//颜色选择器,系统全准备好了(按钮都准备了)----------------------------
final JColorChooser colorPane = new JColorChooser(foreColor);
//《疯狂java讲义》P483 createDialog()方法--------------------------------------
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对象中----相当于鼠标右键监听器------------------------------
//--------------卡在这里半天原来是DrawCanvas的继承关系变了DrawCanvas extends JPanel---------------
//---------------------------之前是继承Canvas,现在是JPanel-----------------------------
drawArea.setComponentPopupMenu(pop);
//drawArea.add(pop);
//将image对象背景色填充成白色
g.fillRect(0,0,AREA_WIDTH,AREA_HEIGHT);
//这是画布的大小。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
drawArea.setPreferredSize(new Dimension(AREA_WIDTH,AREA_HEIGHT));
//监听鼠标移动 (Motion左键) 动作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
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();
//重绘darwArea对象
drawArea.repaint();
}
});
//监听鼠标事件(没有Motion)(右键)。。。。。。。。。上面是监听鼠标移动。。。。。。。。。。。。
drawArea.addMouseListener(new MouseAdapter(){
//实现 鼠标键松开 的事件处理器。。。。。。。。。。。。。。。。。。。。。。。。
public void mouseReleased(MouseEvent e){
//松开鼠标键时,把上一次鼠标拖动事件点的X,Y坐标设为-1
preX = -1;
preY = -1;
}
});
//此代码在swing中相当于鼠标右键监听器----------------------------------------------------
//new JTextArea().setComponentPopupMenu(pop);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(drawArea);
f.pack();
f.setVisible(true);
}
//主程序入口
public static void main(String[] args){
new HandDraw().init();
}
//内部类
class DrawCanvas extends JPanel//------------------------------------------------
{
//重写JPanel的paint方法,实现绘画
public void paint(Graphics g){
//将image绘制到该组件上
g.drawImage(image,0,0,null);
}
}
}
[代码运行效果截图]
初级程序员
by: 菜鸟慢飞 发表于:2018-09-13 08:55:10 顶(0) | 踩(0) 回复
学习一下
回复评论