21xrx.com
2025-04-03 01:54:11 Thursday
文章检索 我的文章 写文章
Java绘图板的实现及案例代码
2023-06-15 11:40:09 深夜i     21     0
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绘图板。运行程序,点击工具栏上的按钮,即可选择不同的绘图形状并在画布上进行绘制。此外,我们还可以对绘图板进行优化,例如添加一些常用操作(撤销、重做、保存等)和菜单栏等。

  
  

评论区