21xrx.com
2024-12-29 03:28:23 Sunday
登录
文章检索 我的文章 写文章
Java绘图板的实现及案例代码
2023-06-15 11:40:09 深夜i     --     --
Java 绘图板 GUI

Java是一门非常强大的编程语言,它不仅可以用于开发Web应用、桌面应用等,还可以用于绘制图形界面。本文将介绍如何使用Java实现绘图板,并给出详细的案例代码。

首先,我们需要一个Java GUI框架,推荐使用Swing。Swing是Java提供的一组GUI组件,可以在任何支持Java的平台上使用。接下来,我们需要几个基本的组件:一个主框架、一个画布、若干工具栏。

代码实现:

 java

import javax.swing.*;

public class Paint extends JFrame {

  public Paint() {

    // 设置主框架的标题和大小

    setTitle("Java绘图板");

    setSize(800, 600);

    // 创建画布

    DrawCanvas canvas = new DrawCanvas();

    // 将画布添加到主框架上

    add(canvas);

    // 创建工具栏

    JToolBar toolBar = new JToolBar();

    // 添加工具栏按钮

    JButton btnLine = new JButton("直线");

    JButton btnRect = new JButton("矩形");

    JButton btnCircle = new JButton("圆形");

    // 添加按钮监听器

    btnLine.addActionListener(e -> canvas.setShape(DrawCanvas.Shape.LINE));

    btnRect.addActionListener(e -> canvas.setShape(DrawCanvas.Shape.RECTANGLE));

    btnCircle.addActionListener(e -> canvas.setShape(DrawCanvas.Shape.CIRCLE));

    // 添加按钮到工具栏

    toolBar.add(btnLine);

    toolBar.add(btnRect);

    toolBar.add(btnCircle);

    // 将工具栏添加到主框架上

    add(toolBar, BorderLayout.NORTH);

    // 设置主框架可以关闭

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    // 显示主框架

    setVisible(true);

  }

  public static void main(String[] args) {

    new Paint();

  }

}

上面的代码实现了一个简单的绘图板,包含一个画布和三个工具栏按钮。接下来我们需要实现画布的功能。这里我们定义一个DrawCanvas类,继承JPanel,重写其中的paintComponent方法,来实现绘图功能。

代码实现:

 java

import javax.swing.*;

import java.awt.*;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.geom.Ellipse2D;

import java.awt.geom.Line2D;

import java.awt.geom.Rectangle2D;

public class DrawCanvas extends JPanel {

  // 定义常量以代表三种形状

  public enum Shape RECTANGLE

  // 定义当前选中的形状

  private Shape shape = Shape.LINE;

  // 定义起点坐标和终点坐标

  private Point startPoint = new Point(0, 0);

  private Point endPoint = new Point(0, 0);

  public DrawCanvas() {

    // 添加鼠标监听器,监听鼠标事件

    addMouseListener(new MouseAdapter() {

      @Override

      public void mousePressed(MouseEvent e) {

        // 获取鼠标点击的坐标,并将其设为起点坐标

        startPoint = e.getPoint();

      }

    });

    addMouseMotionListener(new MouseAdapter() {

      @Override

      public void mouseDragged(MouseEvent e) {

        // 获取鼠标拖拽的坐标,并将其设为终点坐标,然后重绘

        endPoint = e.getPoint();

        repaint();

      }

    });

  }

  public void setShape(Shape shape)

    this.shape = shape;

  

  @Override

  protected void paintComponent(Graphics g) {

    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D) g;

    switch (shape) {

      case LINE:

        // 绘制直线

        g2.draw(new Line2D.Double(startPoint, endPoint));

        break;

      case RECTANGLE:

        // 计算矩形的起始点和宽高,并绘制矩形

        double x = Math.min(startPoint.getX(), endPoint.getX());

        double y = Math.min(startPoint.getY(), endPoint.getY());

        double width = Math.abs(startPoint.getX() - endPoint.getX());

        double height = Math.abs(startPoint.getY() - endPoint.getY());

        g2.draw(new Rectangle2D.Double(x, y, width, height));

        break;

      case CIRCLE:

        // 计算圆形的位置和半径并绘制圆形

        double r = Math.sqrt(Math.pow(endPoint.getX() - startPoint.getX(), 2) +

            Math.pow(endPoint.getY() - startPoint.getY(), 2));

        double cx = startPoint.getX() - r;

        double cy = startPoint.getY() - r;

        g2.draw(new Ellipse2D.Double(cx, cy, 2 * r, 2 * r));

        break;

    }

  }

}

到此为止,我们已经完成了一个简单的Java绘图板。运行程序,点击工具栏上的按钮,即可选择不同的绘图形状并在画布上进行绘制。此外,我们还可以对绘图板进行优化,例如添加一些常用操作(撤销、重做、保存等)和菜单栏等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复