zoukankan      html  css  js  c++  java
  • 画线软件一步一步的升级

    package cn.hncu.gui.draw;

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    import javax.swing.JFrame;

    public class PaintLineJFrame1 extends JFrame{
    public PaintLineJFrame1(){
    super("使用鼠标画直线");
    setBounds(200, 200, 500, 400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().add( new PaintLineCanvas1() );
    setVisible(true);
    }
    public static void main(String[] args) {
    new PaintLineJFrame1();
    }
    }

    class PaintLineCanvas1 extends Canvas implements MouseListener{
    private Point start,end;
    //private Line lines[] = new Line[100];
    public PaintLineCanvas1() {
    this.addMouseListener(this);
    }
    @Override
    public void paint(Graphics g) {
    g.setColor(Color.RED);
    if (start!=null && end!=null) {
    //g.drawLine(100, 100, 200, 200);//写死
    g.drawLine(start.x, start.y, end.x, end.y);//从start画到end
    }
    }

    //刷新图形时,会保留残影---消除画面抖动
    @Override
    public void update(Graphics g) {
    //super.update(g);//父类中的该方法会清除掉画布中原有的图形
    paint(g);
    }


    //下面几个是鼠标事件响应方法
    @Override
    public void mouseClicked(MouseEvent e) {
    }
    @Override
    public void mousePressed(MouseEvent e) {
    start = new Point(e.getX(),e.getY());
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    end = new Point(e.getX(),e.getY());
    //lines[i] = new Line(start,end);
    repaint();
    }
    @Override
    public void mouseEntered(MouseEvent e) {
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }

    }

    --------------------------------------------------------------------------------------------------------------

    package cn.hncu.gui.draw;

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;

    import javax.swing.JFrame;

    public class PaintLineJFrame2 extends JFrame{
    public PaintLineJFrame2(){
    super("使用鼠标画直线");
    setBounds(200, 200, 500, 400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().add( new PaintLineCanvas2() );
    setVisible(true);
    }
    public static void main(String[] args) {
    new PaintLineJFrame2();
    }
    }

    class PaintLineCanvas2 extends Canvas implements MouseListener, MouseMotionListener{
    private Point start,end,lastEnd;
    //private Line lines[] = new Line[100];
    public PaintLineCanvas2() {
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    }
    @Override
    public void paint(Graphics g) {
    if (start!=null && end!=null && lastEnd!=null) {
    g.setColor(this.getBackground());
    g.drawLine(start.x, start.y, lastEnd.x, lastEnd.y);//擦除

    g.setColor(Color.RED);
    g.drawLine(start.x, start.y, end.x, end.y);//从start画到end
    }
    }

    //刷新图形时,会保留残影---消除画面抖动
    @Override
    public void update(Graphics g) {
    //super.update(g);//父类中的该方法会清除掉画布中原有的图形
    paint(g);
    }


    //下面几个是鼠标事件响应方法
    @Override
    public void mouseClicked(MouseEvent e) {
    }
    @Override
    public void mousePressed(MouseEvent e) {
    start = new Point(e.getX(),e.getY());
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    end = new Point(e.getX(),e.getY());
    repaint();
    }
    @Override
    public void mouseEntered(MouseEvent e) {
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }

    //鼠标MotionListener的响应方法
    @Override
    public void mouseDragged(MouseEvent e) {
    // if(end!=null){
    // lastEnd = new Point(end.x,end.y);
    // }

    lastEnd = end;//引用赋值,必捆绑。但是下面的end自己又另开内存,所以两者又分开了,没捆绑
    end = new Point(e.getX(),e.getY());
    repaint();
    }
    @Override
    public void mouseMoved(MouseEvent e) {

    }

    }

    -------------------------------------------------------------------------------------------------------------------------------

    package cn.hncu.gui.draw;

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;

    import javax.swing.JFrame;

    public class PaintLineJFrame3 extends JFrame{
    public PaintLineJFrame3(){
    super("使用鼠标画直线");
    setBounds(200, 200, 500, 400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().add( new PaintLineCanvas3() );
    setVisible(true);
    }
    public static void main(String[] args) {
    new PaintLineJFrame3();
    }
    }

    class PaintLineCanvas3 extends Canvas implements MouseListener, MouseMotionListener{
    private Point start,end;
    public PaintLineCanvas3() {
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    }
    @Override
    public void paint(Graphics g) {
    if (start!=null && end!=null) {
    g.setColor(Color.RED);
    g.drawLine(start.x, start.y, end.x, end.y);//从start画到end
    }
    }

    //刷新图形时,会保留残影---消除画面抖动
    @Override
    public void update(Graphics g) {
    //super.update(g);//父类中的该方法会清除掉画布中原有的图形
    paint(g);
    }


    //下面几个是鼠标事件响应方法
    @Override
    public void mouseClicked(MouseEvent e) {
    }
    @Override
    public void mousePressed(MouseEvent e) {
    if(end!=null){
    end = null;
    }
    start = new Point(e.getX(),e.getY());
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    }
    @Override
    public void mouseEntered(MouseEvent e) {
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }

    //鼠标MotionListener的响应方法
    @Override
    public void mouseDragged(MouseEvent e) {
    start = end;
    end = new Point(e.getX(),e.getY());
    repaint();
    }
    @Override
    public void mouseMoved(MouseEvent e) {

    }

    }

    ---------------------------------------------------------------------------------------------------------------------------------------

    绘图的演示

    package cn.hncu.gui.draw;

    import java.awt.BorderLayout;
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;

    public class FigureDemo extends JFrame {
    public FigureDemo() {
    super("绘图演示程序");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setBounds(100, 100, 500, 400);
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(2, 1));
    panel.add(new MyCanvas());
    panel.add(new MyJPanel());
    getContentPane().add(panel,BorderLayout.CENTER);

    JPanel panel2 = new JPanel();
    //panel2.add(new JButton("OK"));
    MyJButton btn = new MyJButton("OK");
    panel2.add(btn);
    getContentPane().add(panel2,BorderLayout.NORTH);
    btn.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    JOptionPane.showMessageDialog(null, "aa");
    }
    });

    setVisible(true);
    }
    public static void main(String[] args) {
    new FigureDemo();
    }

    }

    //法1:用Canvas来画图
    class MyCanvas extends Canvas{
    @Override
    public void paint(Graphics g) {
    g.setColor(Color.red);
    g.drawLine(10, 10, 200, 200);//相对坐标
    g.setColor(Color.GREEN);
    g.fillOval(100, 100, 50, 50);
    // g.setColor(Color.orange);
    // g.fillOval(100, 100, 200, 200);
    }
    }

    //法2:用JPanel来画图
    class MyJPanel extends JPanel{
    @Override
    public void paint(Graphics g) {
    g.setColor(Color.red);
    g.drawLine(10, 10, 200, 200);
    g.setColor(Color.GREEN);
    g.fillOval(100, 100, 50, 50);//相对坐标
    }
    }

    class MyJButton extends JButton{

    public MyJButton(String str) {
    super(str);
    }
    @Override
    public void paint(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(0, 0, this.getWidth(), getHeight());
    g.setColor(Color.red);
    g.drawLine(0, 0, this.getWidth(), getHeight());
    }

    }

    ---------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    笨办法42物以类聚(补充40)
    笨办法41来自 Percal 25 号行星的哥顿人-randint-exit(0)
    nginx模块1--索引autoindex_基于ip_监控模块status
    selinux
    nginx安装与配置--基础
    svn安装
    docker-registry私有registry
    zabbix钉钉报警
    zabbix字体
    zabbix告警
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5603834.html
Copyright © 2011-2022 走看看