Java GUI入门项目:画图板

发布时间:2025-12-09 20:31:47 浏览次数:7

刚学习Java的小伙伴肯定觉得在控制台输入、打印的操作low爆了吧,那么你可以试一试画图板项目。完成这个项目之后,你可以制作一个属于自己的画图板,来取代电脑自带的画图板
通过这个项目,你可以学习到GUI的基本知识以及监听控制界面的知识

目录

  • 一、准备界面
    • 1、界面属性设置
      • 1)基本属性
      • 2)布局器
    • 2、界面组件添加
  • 二、监听器
    • 1、实现接口
    • 2、怎样画图
    • 3、绘制基本图形
      • 1)直线
      • 2)矩形
      • 3)椭圆
      • 4)铅笔
  • 三、优化

一、准备界面

制作界面前,我们需要认识awt包与swing包,他们都是图形界面工具包,为我们提供了各种组件来制作界面

  • awt包:依赖于操作系统,组件属于重量级组件,也就是不同的操作系统呈现出来的组件样式不一样
  • swing包:不依赖于操作系统,组件属于轻量级组件,类名都以J开头,为新一代图形界面工具,组件相较于awt更为美观

1、界面属性设置

1)基本属性

JFrame frame = new JFrame();frame.setSize(500,500);//界面的宽,高frame.setTitle("画图板");//界面的标题frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击界面的关闭按钮后,进程关闭frame.setLocationRelativeTo(null);//界面居中显示frame.setResizable(false);//不可以对界面大小进行操作frame.setVisible(true);//对以上写的组件可视(这一步至关重要)

2)布局器

常见的布局器有

  • 流式布局器(FlowLayout):界面上的组件根据add的顺寻从左到右,从上到下依次添加到界面上
  • 边框布局器(BorderLayout):将界面分为东西左右中五个方位,每一个方位仅可以添加一个组件,JFrame默认为边框布局器
  • 这里我们选择流式布局器,让按钮在界面上均匀摆放

    frame.setLayout(new FlowLayout());

    2、界面组件添加

    要制作画图板,那么按钮肯定不能少,我们要通过点击按钮来切换绘制的图形
    所以还是用到了swing包下的JButton组件

    JButton btn = new JBUtton("直线");//参数为按钮中显示的文字btn.setPreferredSize(new Dimension(20,20));//设置按钮的首选大小frame.add(btn);//将按钮添加到界面上

    对按钮的美化操作请参考按钮美化

    二、监听器

    1、实现接口

    界面准备好之后,我们就要开始对于界面的各种组件的监听以及用户动作的监听,这样用户与界面才能够有交互
    新建一个类FrameListener,用于对界面进行监听
    监听器类要实现监听就要实现不同的监听器接口

  • ActionListener:对组件进行监听
  • MouseListener:对用户鼠标在界面上的操作进行监听(点击,按下,释放,进入,移出)
  • MouseMotionListener:对用户鼠标在界面上的拖拽,移动的动作监听
  • 注意:实现一个接口,就必须实现接口中的所有方法

    2、怎样画图

    我们需要在界面可视化之后获取画笔才能在界面上进行绘制

    Graphics g = frame.getGraphics();//界面可视化之后获取界面的画笔

    我们可以创建一个传画笔的构造器,使得监听器可以对界面进行绘制

    3、绘制基本图形

    x1,y1:按下时的坐标
    x2,y2:释放时的坐标
    GUI的坐标系采用的时笛卡尔坐标系,原点在左上角

    1)直线

    g.drawLine(x1,y1,x2,y2);

    2)矩形

    前两个参数为矩形的左上角坐标,后两个参数为矩形的宽,高
    注意:纵坐标小的点才是矩形的左上角

    g.drawRect(y1>y2?x1:x2,y1>y2?y1:y2,Math.abs(x2-x1),Math.abs(y2-y1));

    3)椭圆

    绘制原理与矩形同理

    g.drawOval(y1>y2?x1:x2,y1>y2?y1:y2,Math.abs(x2-x1),Math.abs(y2-y1));

    4)铅笔

    实现铅笔小效果,需要实现MouseMotionListener与MouseListener两个接口

    @Overridepublic void mouseReleased(MouseEvent e) {isPressed = false;}@Overridepublic void mouseDragged(MouseEvent e) {//当选择画直线时,鼠标拖拽,每次都记录上一个点,下一个点与上一个点相连if(strnum== Message.PENCILE){if (!isPressed) {x1 = e.getX();y1 = e.getY();isPressed = true;} else if (isPressed) {x2 = e.getX();y2 = e.getY();g.drawLine(x1,y1,x2,y2);x1 = x2;y1 = y2;}}}

    三、优化

    public class Shape{//构造器传参int x1,y1;//按下点int x2,y2;//释放点Color color;//yanseString type;//图形种类public void drawShape(Graphics g){//通过if-else语句对图形的种类进行判断//然后进行绘制}}

    这样我们在监听的时候,只需要通过参数构造Shape,然后调用drawShape方法进行绘制就可以了,这也就解决了保存图形信息的问题
    我们可以在监听器类中创建ArrayList来保存Shape
    在继承了JFrame的界面类中重写JFrame的paint方法,遍历ArrayList进行绘制即可


    最后给大家分享一下我的画图板

    看到了这里,相信大家对GUI充满了兴趣,那么就敲动你的代码,写出属于你自己的画图板吧!

    对以上内容有疑问的小伙伴也欢迎在评论区讨论哦

    需要做网站?需要网络推广?欢迎咨询客户经理 13272073477