A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-张化 中级黑马   /  2012-8-6 19:22  /  2571 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. *package com.August;
  2. /**
  3. * 作者:ZhangHua QQ:1252213678
  4. *
  5. * 功能: 画板
  6. */
  7. import java.awt.Color;
  8. import java.awt.Graphics;
  9. import java.awt.Graphics2D;
  10. import java.awt.Toolkit;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.event.MouseMotionListener;

  13. import javax.swing.JFrame;
  14. import javax.swing.JPanel;

  15. /**
  16. *
  17. * 实现拖动鼠标在面板中画图
  18. *
  19. */
  20. public class MouseDemo extends JFrame implements MouseMotionListener
  21. {
  22. public static void main(String[] args)
  23. {
  24. MouseDemo mouseDemo = new MouseDemo();
  25. mouseDemo.setVisible(true);
  26. }
  27. //
  28. private JPanel p;
  29. int x, y;
  30. public MouseDemo()
  31. {

  32. p = new JPanel();
  33. //注册鼠标监听
  34. p.addMouseMotionListener(this);
  35. // p.add(new JButton("画图"));
  36. this.add(p);
  37. this.setSize(Toolkit.getDefaultToolkit().getScreenSize().width,Toolkit.getDefaultToolkit().getScreenSize().height);

  38. this.setLocation(0, 0);
  39. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  40. }
  41. //重写JFrame的paint()方法、此方法用于在窗体中画图
  42. public void paint(Graphics g)
  43. {
  44. //<FONT color=red> super.paint(g); ----- //为何 加上 super 就不能画图了
  45. </FONT>Graphics2D g2 = (Graphics2D)g;
  46. g2.setColor(Color.WHITE);
  47. g2.drawRect(0, 0, 0, 0);
  48. //设置画笔的颜色
  49. g2.setColor(Color.BLUE);
  50. //画一个实心圆
  51. g2.fillOval(x, y, 5, 5);
  52. }

  53. //鼠标拖动的处理方法
  54. public void mouseDragged(MouseEvent e)
  55. {
  56. //获取鼠标的当前坐标
  57. x = e.getX();
  58. y = e.getY();
  59. //重画、repaint()触发paint()
  60. this.repaint();
  61. }
  62. //鼠标移动的处理方法
  63. public void mouseMoved(MouseEvent e)
  64. {

  65. }

  66. }
复制代码
为何最最小化、又最大化之后 屏幕变成黑色

未命名.jpg (69.21 KB, 下载次数: 6)

未命名.jpg

QQ截图20120806192125.png (44.85 KB, 下载次数: 6)

QQ截图20120806192125.png

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
this.repaint();从那儿来的
回复 使用道具 举报
我之前做画图的时候,做出来的效果和你一样,后来请教了一下别人,改了一下,用画点的方式,不太好,因为不可能连起来,别人教我是用画直线的方法
下面是代码,你参考下吧
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

public class GraphicsDemo2 {
        public static void main(String[] args) {
                new FrameFFF("draw....");
        }
}

class FrameFFF extends Frame {
        //frame大小
        private static final int AREA_LENGTH = 500;
        private int preX = -1;
        private int preY = -1;
        //用做缓冲
        private BufferedImage image = new BufferedImage(AREA_LENGTH, AREA_LENGTH,
                        BufferedImage.TYPE_INT_BGR);
        Graphics g = image.getGraphics();

        FrameFFF(String name) {
                super(name);
                setBounds(300, 150, AREA_LENGTH, AREA_LENGTH);
                setVisible(true);
                //将底色置为白色,便于观看
                g.fillRect(0, 0, AREA_LENGTH, AREA_LENGTH);
                //添加鼠标监听
                addMouseMotionListener(new MouseMotionAdapter() {
                        public void mouseDragged(MouseEvent e) {
                                //均大于0时肯定已经在内部了,且已经点击过一次,记录下了第一次的坐标
                                //所以这时划线已经没有问题了
                                if (preX > 0 && preY > 0) {
                                        g.setColor(new Color(123, 44, 82));
                                        g.drawLine(preX, preY, e.getX(), e.getY());
                                }
                                preX = e.getX();
                                preY = e.getY();

                                repaint();
                        }
                });

                //窗口关闭
                addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                                System.exit(0);
                        }
                });

                addMouseListener(new MouseAdapter() {
                        public void mouseReleased(MouseEvent e) {
                                preX = -1;
                                preY = -1;
                        }
                });
        }

        public void paint(Graphics g) {
                // 整体绘制
                g.drawImage(image, 0, 0, null);
        }
}
希望可以帮到你
回复 使用道具 举报
余明辉 发表于 2012-8-6 21:02
我之前做画图的时候,做出来的效果和你一样,后来请教了一下别人,改了一下,用画点的方式,不太好,因为不 ...

给了我灵感、、不过 你的不行啊 出现闪屏  我改改 再看看
回复 使用道具 举报
黑马-张化 发表于 2012-8-6 21:09
给了我灵感、、不过 你的不行啊 出现闪屏  我改改 再看看

将this.setVisible(true);
放到g.fillRect(0, 0, AREA_LENGTH, AREA_LENGTH);
之后就不闪了,先填充,后显示
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马