21xrx.com
2024-11-10 00:23:36 Sunday
登录
文章检索 我的文章 写文章
图形简单易懂教程
2023-06-16 12:42:57 深夜i     --     --

Java实现基础图形绘制

Java简单画图板完整代码

Java是一门广泛应用于计算机编程领域的高级编程语言,其简单易学的特性受到了广泛的欢迎和使用。在Java中,我们可以使用Graphics类实现基本图形的绘制,从而完成一个简单的画图板。

以下是一个Java简单画图板的完整代码。


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Paint extends JFrame implements MouseListener, MouseMotionListener {

  private static final long serialVersionUID = 1L;

  private int startX, startY, endX, endY;

  private Graphics graphics;

  private JMenuBar bar;

  private JMenu menuFile, menuEdit, menuHelp;

  private JMenuItem fileOpen, fileSave, fileClear;

  private JMenuItem editUndo, editRedo;

  private JMenuItem helpAbout;

  private JPanel contentPanel;

  private JLabel longX, lonY;

  private int count = 0;

  public static void main(String[] args) {

    Paint paint = new Paint();

    paint.setVisible(true);

  }

  public Paint() {

    super("Java Painter");

    this.setLocation(100, 100);

    this.setSize(800, 600);

    bar = new JMenuBar();

    menuFile = new JMenu("文件(F)");

    menuFile.setMnemonic(KeyEvent.VK_F);

    menuEdit = new JMenu("编辑(E)");

    menuEdit.setMnemonic(KeyEvent.VK_E);

    menuHelp = new JMenu("帮助(H)");

    menuHelp.setMnemonic(KeyEvent.VK_H);

    fileOpen = new JMenuItem("打开(O)");

    fileOpen.setMnemonic(KeyEvent.VK_O);

    fileSave = new JMenuItem("保存(S)");

    fileSave.setMnemonic(KeyEvent.VK_S);

    fileClear = new JMenuItem("清空(C)");

    fileClear.setMnemonic(KeyEvent.VK_C);

    editUndo = new JMenuItem("撤销(U)");

    editUndo.setMnemonic(KeyEvent.VK_U);

    editRedo = new JMenuItem("重做(R)");

    editRedo.setMnemonic(KeyEvent.VK_R);

    helpAbout = new JMenuItem("关于(A)");

    helpAbout.setMnemonic(KeyEvent.VK_A);

    menuFile.add(fileOpen);

    menuFile.add(fileSave);

    menuFile.addSeparator();

    menuFile.add(fileClear);

    menuEdit.add(editUndo);

    menuEdit.add(editRedo);

    menuHelp.add(helpAbout);

    bar.add(menuFile);

    bar.add(menuEdit);

    bar.add(menuHelp);

    this.setJMenuBar(bar);

    contentPanel = new JPanel();

    this.setLayout(new BorderLayout());

    this.add(contentPanel);

    contentPanel.addMouseListener(this);

    contentPanel.addMouseMotionListener(this);

    longX = new JLabel("");

    lonY = new JLabel("");

    contentPanel.add(longX, BorderLayout.SOUTH);

    contentPanel.add(lonY, BorderLayout.SOUTH);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setVisible(true);

  }

  public void clear() {

    graphics.setColor(Color.WHITE);

    graphics.fillRect(0, 0, 800, 600);

    graphics.setColor(Color.BLACK);

    repaint();

  }

  @Override

  public void mousePressed(MouseEvent e) {

    startX = e.getX();

    startY = e.getY();

    count++;

  }

  @Override

  public void mouseReleased(MouseEvent e) {

    endX = e.getX();

    endY = e.getY();

    graphics.drawLine(startX, startY, endX, endY);

    count++;

  }

  @Override

  public void mouseDragged(MouseEvent e) {

    if (count > 0) {

      endX = e.getX();

      endY = e.getY();

      graphics.drawLine(startX, startY, endX, endY);

      startX = endX;

      startY = endY;

    }

  }

  @Override

  public void mouseClicked(MouseEvent e)

  

  @Override

  public void mouseEntered(MouseEvent e)

  

  @Override

  public void mouseExited(MouseEvent e)

  

  @Override

  public void mouseMoved(MouseEvent e) {

    longX.setText("坐标:" + e.getX());

    lonY.setText("坐标" + e.getY());

  }

  public void setGraphics(Graphics graphics)

    this.graphics = graphics;

  

}

上面的代码中,我们定义了一个名为Paint的类,该类继承自JFrame,并实现了MouseListener和MouseMotionListener接口,以实现鼠标事件的监听和处理。在类的构造函数中,我们定义了一个JMenuBar及其所包含的JMenuItem,这些为画图板提供一些常用的功能,比如打开、保存、撤销、清空等。同时我们还通过contentPanel对象添加了鼠标事件监听器。

在Paint类中,我们还定义了一个clear方法,用于清空画板。在鼠标事件的处理中,我们还可以响应鼠标按下、鼠标抬起以及鼠标拖拽事件,并使用graphics对象绘制出一些简单的图形,如直线。我们还实现了mouseMoved方法,用于监听鼠标的移动,从而在状态栏上显示鼠标移动时的坐标。最后,我们通过setGraphics方法绑定graphics对象,从而实现基本图形绘制的功能。

通过这个简单的画图板代码,我们可以了解到Java绘图的基本流程及其实现方法,是Java初学者的必备知识点。如果你想更进一步了解Java绘图,还可以学习Java高级绘图技术,实现更加复杂的图形绘制。

  
  

评论区

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