用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。

2018-03-12 作者: 五只脚的鱼举报

[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);
        }
    }
}

[代码运行效果截图]


手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...