java:画图板的制作

学会了使用按钮监听以及鼠标监听器之后,我们就可以制作一个属于自己的画图板了,以下是我之前制作的一个简易的画图板,功能方面尚还不足,不过已经可以完成铅笔,橡皮,画直线,圆等基本工作了,还可以完成颜色的自由选择,大家不放自己也动手做做吧。

首先是界面类:

Java代码

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;  

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;  

@SuppressWarnings("serial")
public class Draw extends JFrame{
    public Color color=Color.BLACK;//设置初始颜色
    private Color colorselector;
    private JButton colorselectorbu[]=new JButton[6];
    //创建对象时需要new一个对象,否则他的默认值就是NULL
    private JPanel colorjp=new JPanel();
    public static void main(String args[]){
        Draw dr=new Draw();
        dr.showframe();
    }
    public void showframe(){
        JPanel north=new JPanel();        //上方区域,存放颜色按钮以及颜色选择器
        JPanel west=new JPanel();         //左边区域,存放图形按钮
        JPanel center=new JPanel();       //中间区域,存放画板
        JPanel south=new JPanel();        //下面区域,用来显示当前鼠标所在前位置以及所画图形的大小
        //-----------------中间区域---------------
        center.setLayout(new FlowLayout(FlowLayout.LEFT));//将中间区域的布局设置为左对齐
        JPanel drawjp=new JPanel();
        drawjp.setBackground(Color.white);
        drawjp.setPreferredSize(new Dimension(600,500));
        center.add(drawjp);
        //-----------------上方区域----------------
        JButton colorchooserbu=new JButton("更多颜色");
        colorchooserbu.addActionListener(colorlistener);
        colorjp.setPreferredSize(new Dimension(120,60));
        colorjp.setLayout(new GridLayout(3,6,0,0));
        //创建一个颜色组
        Color color[]=new Color[]{Color.BLACK,Color.BLUE,Color.CYAN,Color.DARK_GRAY,Color.GRAY,Color.GREEN
                ,Color.LIGHT_GRAY,Color.GREEN,Color.MAGENTA,Color.ORANGE,Color.PINK,Color.YELLOW};
        Dimension d=new Dimension(20,20);
        for(int i=0;i<color.length;i++){
            JButton colorbu=new JButton();
            colorbu.setBackground(color[i]);
            colorbu.setPreferredSize(d);
            colorjp.add(colorbu);
            colorbu.addActionListener(listener);
        }
        //按钮选择器的自定义颜色组
        for(int j=0;j<colorselectorbu.length;j++){
            colorselectorbu[j]=new JButton();
            colorselectorbu[j].setPreferredSize(d);
            colorjp.add(colorselectorbu[j]);
            colorselectorbu[j].addActionListener(listener);
        }
        north.add(colorjp);
        north.add(colorchooserbu);
        //-----------------左边区域----------------
        String img[]=new String[]{"Line", "oval", "rect", "roundrect", "eraser", "fill",
                "pencil", "select"};
        String img1[]=new String[]{"Line1","oval1","rect1","roundrect1","eraser1","fill1",
                "pencil1","select1"};
        ButtonGroup bg=new ButtonGroup();
        for(int i=0;i<img.length;i++){
            //创建Icon组
            ImageIcon shapeicon=new ImageIcon("back/"+img[i]+".jpg");
            ImageIcon shapeicon1=new ImageIcon("back/"+img1[i]+".jpg");
            JRadioButton shapebu=new JRadioButton(shapeicon);
            bg.add(shapebu);
            shapebu.setPressedIcon(shapeicon1);
            //设置选中时的图案
            shapebu.setSelectedIcon(shapeicon1);
            shapebu.setActionCommand(img[i]);
            west.add(shapebu);
        }
        //---------------下方区域-------------
        JLabel la1=new JLabel();
        JLabel la2=new JLabel();
        JLabel la3=new JLabel("600x500像素");
        JLabel la4=new JLabel();
        south.add(la4);
        south.add(la1);
        south.add(la2);
        south.add(la3);
        south.setLayout(new GridLayout(1,4,20,20));
        north.setPreferredSize(new Dimension(200,80));
        west.setPreferredSize(new Dimension(80,200));
        south.setPreferredSize(new Dimension(200,20));
        north.setBackground(Color.GRAY);
        west.setBackground(Color.DARK_GRAY);
        center.setBackground(Color.LIGHT_GRAY);
        south.setBackground(Color.WHITE);
        this.setLayout(new BorderLayout());
        this.add(north,BorderLayout.NORTH);
        this.add(west,BorderLayout.WEST);
        this.add(south,BorderLayout.SOUTH);
        this.add(center,BorderLayout.CENTER);
        this.setTitle("画图板复习");
        this.setSize(900,700);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(3);
        this.setVisible(true);
        //在画板上获取画布权限
        Graphics g=drawjp.getGraphics();
        DrawListener listener=new DrawListener(g,bg,this,la1,la2);
        drawjp.addMouseListener(listener);
        drawjp.addMouseMotionListener(listener);
    }
    //添加按钮监听,获取按钮的背景颜色
    ActionListener listener=new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            //获取事件源,发生事件的对象
            Object obj=e.getSource();
            if(obj instanceof JButton){
                color=((JButton) obj).getBackground();
            }
        }
    };
    ActionListener colorlistener=new ActionListener(){
        //按钮数组累加器
        int i = 0;
        public void actionPerformed(ActionEvent e){
                colorselector=JColorChooser.showDialog(null, "颜色选择器", Color.BLACK);
                colorselectorbu[i].setBackground(colorselector);
                i++;
                if(i>=6){
                    //超出六个按钮,返回0
                    i=0;
                }
        }
    };
}

下面是监听类:

Java代码

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索new
, awt
, color
, import
, jpanel
, javax
, 区域
, FlowLayout
, 用java画图
JColorChooser
,以便于您获取更多的相关知识。

时间: 2024-11-03 06:20:09

java:画图板的制作的相关文章

在java做的画图板中,如何选中一个已经画好的图形,把它放大、缩小、移动???

问题描述 在java做的画图板中,如何选中一个已经画好的图形,把它放大.缩小.移动???类似windows的画图板功能,急呀,大牛们帮帮忙 解决方案 解决方案二:你要做图形处理的话,在画这个图形的时候就要把图形的数据保存起来,例如:直线就要保存两个端点的坐标,圆就要保存圆心坐标和半径.然后根据操作,对保存的数据进行相应的处理,再重画图形.建议看下图形学的一些知识.解决方案三:可是我只是个菜鸟,不会那些呀,怎么能选中图形呢?解决方案四:packageaa;importjavax.swing.*;i

菜鸟求指点:有关JAVA制作画图板程序

问题描述 先请求一下,哪位有程序员联合开发网账号的大虾可不可以帮忙下载一下如下两个源码:http://www.pudn.com/downloads133/sourcecode/java/detail565171.htmlhttp://www.pudn.com/downloads116/sourcecode/java/detail493169.html邮箱:bowway@gmail.com谢谢!!!!正题:本人不是学计算机的,但是我的硕士论文需要一个工具来采集数据,就是一个可以让用户使用程序提供的

java基础-我是新手 用JAVA编写画图板时不知到怎么在菜单前边加上那一部分空白

问题描述 我是新手 用JAVA编写画图板时不知到怎么在菜单前边加上那一部分空白 我是新手 用JAVA编写画图板时不知到怎么在菜单前边加上那一部分空白

类似画图板的小程序

最近做了一个类似Windows画图板的小程序,拿来和大家分享一下.功能和界面全部模仿于Windows自带的画图板,界面如截图.功能主要有: 手绘线.简单图形.文字输入.图块拖放.重复撤销.画面缩放.打开保存图片文件,另外为了直接从数据库或者XML中存取图片,另外还提供了从Base64编码存取图片的接口,其他还实现了和画图板同样效果的工具箱及颜料盒. 1.绘图: 绘制功能主要在OnLButtonDown.OnMouseMove.OnLButtonUp中实现,根据当前选择的工具和工具的样式进行绘制.

Win7怎么用自带画图板裁剪图片?

  Win7怎么用自带画图板裁剪图片?很多用户问小编Win7怎么用自带画图板裁剪图片?有时候需要美化图片,但是对于不懂美图秀秀或者不懂PS的人,对照片或图片进行裁剪,是件困难的事情吧,网上介绍很多关于裁剪图片的教程,但是都比较复杂,还要下载软件.其实win7旗舰版系统自带的自带画图板就可以裁剪图片了,下面小编告诉大家具体的使用方法. 具体方法如下: 1.点开始>所有程序>附件>打开画图选项; 2.点击画图板主页选项左侧的小三角,选择打开一幅图片; 3.点击主页>选择形状>矩形

iOS开发之画图板(贝塞尔曲线)

贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能.如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解.这篇博文的重点不在于如何用使用贝塞尔曲线,而是利用贝塞尔划线的功能来封装一个画图板. 画图板的截图如下,上面的白板就是我们的画图板,是自己封装好的一个UIView,下面会详细的介绍如何封装这个画图板,下面的控件用来控制我们画图板的属性以及Undo,Redo和保存功能.点击保存时会把绘制的图片保存到手机的相册中.下面是具体的实现方案.   一.封装画图

java画金字塔,但是程序无响应

问题描述 java画金字塔,但是程序无响应 import acm.program.*; import acm.graphics.*; public class jinzita extends GraphicsProgram{ public static final double BRICK_WIDTH=10; public static final double BRICK_HEIGHT=4; public static final double BRICK_IN_BASE=10; public

gdi+-请教大家,用GDI+怎么绘制画图板的色调、饱和度的矩形。

问题描述 请教大家,用GDI+怎么绘制画图板的色调.饱和度的矩形. 就是ColorDialog的色调.饱和度的选择框,用什么绘制方法绘制. 解决方案 Rectangle会用当前画刷填充矩形 解决方案二: 自己解决了,遍历颜色创建位图贴上去!

java画拓扑图。目前我只会画静态的,怎么实现移动其中一个圆,整个拓扑图也随之变化

问题描述 java画拓扑图.目前我只会画静态的,怎么实现移动其中一个圆,整个拓扑图也随之变化 解决方案 维护一个节点坐标和节点到节点连线的数据结构,移动节点就更新节点坐标,并且重新绘图.