Java Swing实现画板,可以打开,保存,基本图形,画笔设定

Java Swing实现画板https://github.com/nekoer723/drawpic源码已上传基本要求:新建一个空白图形文件打开或者保存一个图形文件绘制基本图形直线、矩形、圆、椭圆任意线添加文字设定颜色与文字风格优化:设定画笔橡皮擦操作撤销画线与图形的预览1.面板UI设计与实现1.设计总窗口布局flowlayout设置关闭方式窗体大小不变菜单栏3个面板(Jpanel),jp1,jp2,jp
摘要由CSDN通过智能技术生成

Java Swing实现画板

https://github.com/nekoer723/drawpic

源码已上传

基本要求:

  • 新建一个空白图形文件

  • 打开或者保存一个图形文件

  • 绘制基本图形

    • 直线、矩形、圆、椭圆
  • 任意线

  • 添加文字

  • 设定颜色与文字风格

优化:

  • 设定画笔
  • 橡皮擦
  • 操作撤销
  • 画线与图形的预览

1.面板UI设计与实现

1.设计

  1. 总窗口

    • 布局flowlayout
    • 设置关闭方式
    • 窗体大小不变
  2. 菜单栏

  3. 3个面板(Jpanel),jp1,jp2,jp3

    • jp1(左侧按钮,15行,1列)

      • 布局Gridlayout(rows:15,clos:1,hgap:10,vgap:10)
    • jp2(画板)

      • 重构 paint函数
      • 背景颜色白色
    • jp3(画笔颜色以及粗细)

      • 布局GridLayout(1行,颜色数组的长度列)
      • Jslider (滑块,调节画笔粗细)

2.实现

  1. 重构paint函数

    public void paint(Graphics g1) {
         
                g=(Graphics2D)g1;
                //画船体
                System.out.println("repaint");
                super.paint(g);
                list = dl.list;
                for (Shape1 l : list) {
         
                    l.draw(g);
                }
            }
    //public ArrayList<Shape1> list = new ArrayList<>();
    

    list是一个shape1类的数组,里面储存有图像信息,通过对list里图像信息的重绘来实现画板的更新

  2. 注意为组件添加监听类

2.画板监听类

这个类实现了所有左侧按钮功能,以及对底部jp3中的颜色

定义了图形类,并实现了基本图形

1.画板监听

public class picListener implements ActionListener, MouseListener, MouseMotionListener{
   

    private Color color = Color.BLACK;
    private Graphics2D g; //画笔属性
    private String str;//保存按钮上的字符串。区分不同的按钮
    private int x1,y1,x2,y2;//坐标
    private JButton nowColor;//当前颜色
    private float width;//画笔粗细
    private int flag1 = 0; //预显示

    private Shape1 flag2 = new ImpLine(-1,-1,-1,-1,Color.WHITE,0);//用于撤销操作的标志
    public static ArrayList<Shape1> list =new ArrayList<Shape1>();

撤销操作是我自己实现,读者可以尝试用undo函数,比较简单

@Override
    public void actionPerformed(ActionEvent e) {
   

        //判断是颜色按钮还是图形按钮
        if ("".equals(e.getActionCommand())) {
   
            JButton jb = (JButton) e.getSource();
            color = jb.getBackground();
            nowColor.setBackground(color);//处理当前颜色
        } else {
   
            str = e.getActionCommand();
            if("文本框".equals(str)) {
   
                pic2.paint.textin.setVisible(true);
                System.out.println(pic2.paint.getDl().getG().getFont().getName());
            } else if ("清空".equals(e.getActionCommand())) {
   
                list.removeAll(list);
                pic2.paint.jp2.repaint();
            } else if ("撤销".equals(e.getActionCommand())) {
   
                //list.remove(list.size() - 1);
                int t =list.size();
                int fff = 0;
                for(int i = 1; i<=t ;i++) {
   
                    if(list.get(list.size() - i) == flag2) {
   
                        fff=1;
                    }
                }
                if(fff == 1){
   
                    for(int i = 0; i<t ;i++) {
   
                        if(list.get(list.size() - 1) == flag2){
   
                            list.remove(list.size() - 1);
                            System.out.println("撤销");
                            pic2.paint.jp2.repaint();
                            break;
                        }
                        else {
   
                            list.remove(list.size() - 1);
                        }
                    }
                }

                //list.remove(list.size() - 1);
                //pic2.paint.jp2.repaint();
            }
        }
    }

    @Override
    public void mouseClicked(MouseEvent e) {
   

    }

    @Override
    public void mousePressed(MouseEvent e) {
   
        g.setColor(color);//改变画笔的颜色
        x1=e.getX();//获取按下时鼠标的x坐标
        y1=e.getY();//获取按下时鼠标的y坐标

        if("画曲线".equals(str) ||"画直线".equals(str) ||"矩形".equals(str) ||"圆形".equals(str) ||"椭圆".equals(str)||"实心圆形".equals(str)
        ||"橡皮擦".equals(str)){
   
            System.out.println("press");
            list.add(flag2);
        }

    }

    @Override
    public void mouseReleased(MouseEvent e) {
   
        //list.add(flag2);
        if(flag1 > 0) {
   
            System.out.println("removeflage");
            list.remove
  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值