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());
    }

    }

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

  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5603834.html
Copyright © 2011-2022 走看看