Java画板

Java简易画板的实现


## 构建一个用于画图的窗口

配置一下窗口的基本属性,按照如下顺序

创建一个类继承JFrame 创建该类无参方法 方法中编写:

  • 窗口页面的名字(setTitle)/采用new对象里面传窗口名字
  • 窗口长度,高度(setSize)
  • 保证开关同步方法(setDefaultCloseOperation)
  • 设定画板在中央(setLocationRelativeTo(null))
  • 创建流的布局( setLayout() )
  • 配置实现目标功能的名字
  • 窗口可见方法(setVisible)
  • 重写JFrame中的画笔方法paint()
import javax.swing.*;
import java.awt.*;

public class DemoTest extends JFrame {
    DrawListener1 drawl = new DrawListener1();

    public void initUI1(){
        JFrame jf = new JFrame("画板");
        //创建JFrame对象 导入其中的包

//        jf.setTitle("画板");
        //修改程序的名字

        jf.setSize(1000,800);
        //创建画板的尺寸

        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
        //关闭时,会同时结束当前运行状态

        jf.setLocationRelativeTo(null);
        //设定画板在中央

        jf.setLayout(new FlowLayout());
        //创建流的布局,第一行不够,第二行会接着存储,不收窗口伸缩影响

        String [] s  = {"直线","矩形","圆形"};//设定需要实现功能的名字
        for (int i = 0; i < s.length; i++) {//
            JButton jButton = new JButton(s[i]);
            jButton.addActionListener(drawl);
            jf.add(jButton);
        }
        jf.setVisible(true);
        //打开数据可视化窗口

        jf.addMouseListener(drawl1); //实时监听
       
        drawl.setGraphics(jf.getGraphics());//获取画笔
    }

    public void paint(Graphics graphics)
    //画笔
    {
        super.paint(graphics);

    }
    
	

这里我们写一个鼠标监听器,用于接收用户在窗口上的操作

package Demo.Test;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListener1 implements  ActionListener,MouseListener {

//ActionListener中具有actionPerformed抽象方法,需要把抽象方法实现
//同理MouseListener(鼠标鼠标监听器) 中有五个抽象方法,也需要重写
    int x,y,x1,y1;//初始坐标,结束坐标
    String shapeType;
    Graphics graphics = null;//画笔初始化

    public void setGraphics(Graphics graphics) {//提供获取画笔方法
        this.graphics = graphics;
    }

        public void actionPerformed(ActionEvent e) {
        //这个方法就是你希望触发事件时程序要做什么。
        shapeType = e.getActionCommand ();
        //获取其中字符串输出
        System.out.println (shapeType);

    }

    @Override
    public void mouseClicked(MouseEvent e) {//鼠标监听器的5个功能
        System.out.println("点击");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        x = e.getX();
        y = e.getY();
        System.out.println("按下");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        x = e.getX();
        y = e.getY();
        System.out.println("释放");
        switch(shapeType)
        {
            case "直线": 
            graphics.drawLine(x,y,x1,y1);
            //绘制直线 按照API参数配置即可
                    break;
            case "矩形":
            //这里写的只是矩形的部分情况
                graphics.drawRect(Math.min(x,y),Math.min(y,y1),Math.abs(x1-x),Math.abs(y1-y));//绘制矩形 使用了数学的方法绘制其中部分情况
                break;
            case "圆形":
                graphics.drawOval(Math.min(x,y),Math.min(y,y1),Math.abs(x1-x),Math.abs(y1-y));

//         在该图形上下文的坐标系中的点 (x1, y1)和 (x2, y2)之间绘制一行,使用当前颜色
            default:break;
        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("进入");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("离开");
    }
}


最后启动当前的main方法调用

 public static void main(String[] args) {
        new DemoTest().initUI1();
    }

在这里插入图片描述
会实现这么居中的一个窗口

稍微画一会hhh
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值