java repaint()求助

我想要实现在鼠标点击的位置绘制一个方块,绘制新的方块的同时保留已经绘制的方块,可是现在绘制新图形的时候,原有图形被覆盖,求大神帮忙import java.awt.Canvas;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JDesktopPane;

import javax.swing.JFrame;

import javax.swing.JInternalFrame;

import javax.swing.JPanel;

public class Test extends JFrame implements MouseListener {

int x;

int y;

int flag;

public static void main(String[] args){

Test test= new Test();

test.setVisible(true);

}

public Test() {

setSize(300,200);

DrawPanel drawtable= new DrawPanel();

drawtable.addMouseListener(this);

setContentPane(drawtable);

}

public class DrawPanel extends JPanel{

public void paint(Graphics g){

Graphics2D g2= (Graphics2D) g;

if(flag==1){

draw1(g2,x,y);

System.out.println(x);

System.out.println(y);

}

}

public void draw1(Graphics2D g2,int x,int y){

g2.setColor(Color.BLACK);

g2.fillRect(x, y, 10,10);

}

}

@Override

public void mouseClicked(MouseEvent e) {

x=e.getX();

y=e.getY();

flag=1;

repaint();

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

}

------解决思路----------------------

你需要用一个成员变量记忆你以前的操作,我大概改了一下,能实现你的想法,给你做个参考。

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Point;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.ArrayList;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Test extends JFrame implements MouseListener {

int x;

int y;

int flag;

//这个对象提成成员变量,是为了方便操作它

private DrawPanel drawtable;

public static void main(String[] args) {

Test test = new Test();

test.setVisible(true);

}

public Test() {

setSize(300, 200);

drawtable = new DrawPanel();

drawtable.addMouseListener(this);

setContentPane(drawtable);

}

public class DrawPanel extends JPanel {

//新增成员,用于保存每次操作所点的位置

private ArrayList points;

// 新建了一构造方法,初始化点列表

public DrawPanel() {

points = new ArrayList();

}

//新增方法,用于向点列表增加一个点

public void addPoint(Point p) {

points.add(p);

//点变化了,申请重绘

repaint();

}

//这个方法做了点儿修改

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

g2.setColor(Color.BLACK);

//遍历点列表,重绘界面

Point p;

for (int i = 0; i

p = points.get(i);

g2.fillRect((int) p.getX(), (int) p.getY(), 10, 10);

}

}

}

@Override

public void mouseClicked(MouseEvent e) {

x = e.getX();

y = e.getY();

//这里不再直接操作drawtable,而是让DrawPanl对象增加一个点

drawtable.addPoint(new Point(x, y));

}

@Override

public void mousePressed(MouseEvent e) {

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

}

------解决思路----------------------

我记得论坛有个一模一样的帖子,你找找。

java repaint 速度,java repaint()相关推荐

  1. java 反射 速度_Java反射,但速度更快

    java 反射 速度 在编译时不知道Java类的最快方法是什么? Java框架通常会这样做. 很多. 它可以直接影响其性能. 因此,让我们对不同的方法进行基准测试,例如反射,方法句柄和代码生成. 用例 ...

  2. java c 速度_Java和C#运行速度对比:Java比C#快约3倍

    测试条件: Java版本: Java 8, .NET版本:v4.0, Release模式,针对x86平台优化 单线程模式. Java代码: package javatest; public class ...

  3. 交通工具速度Java

    为某研究所编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A.B.C的表达式.现有两种工具:Car 007 和Plane,其中Car 007 的速 ...

  4. java js 速度慢,java js 速度慢jQuery常用知识点总结以及平时封装常用函数

    本文为大家介绍了jQuery中常用知识点及函数,包含许多细节方面的知识,下面我们一起学习一下. jQuery中为我们提供了很多有用的属性,自己总结的一些常用的函数.个人认为在在线排盘开发中会比较常用的 ...

  5. 12306给自家技术团队打90分;Oracle 加快 Java 迭代速度

    (点击上方蓝字,快速关注我们) 转自:开源中国.solidot.cnBeta.腾讯科技等 0.最高峰抢票时段平稳度过,12306 技术团队为自己打 90 分以上 据中国之声<全国新闻联播> ...

  6. java hashmap 速度慢_HashMap遍历速度最快的解决方案

    [java]代码库java Map 遍历速度最优解 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); w ...

  7. 现代Java开发速度很快

    Øriginally posted on return.co.de Java开发快速而有趣. 信不信由你. 我在播客中听到了很多有关Java的抨击,大多数是从未进行过专业Java开发的开发人员,他们将 ...

  8. java获取磁盘读取速度_记录屏幕Java磁盘速度

    您可能要考虑的一种选择是对多个线程进行处理.一个线程可以专用于截屏,而其他许多线程可以写入磁盘.由于写入磁盘不是占用大量CPU的操作,因此您可以让它们中的许多并发运行,每个写入一个不同的文件.以下程序 ...

  9. java毕业设计——基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码)——医学图像处理系统

    基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+图像处理技术的医学图像处理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

最新文章

  1. 使用 vue filters过滤器直接显示 几分钟前 几小时前 几天前
  2. c/s开发基础自学纪录为主
  3. php mysql 时间字段_php – MySQL中各种日期/时间字段类型的优...
  4. Kubernetes 集群升级指南:从理论到实践
  5. python语言流程控制语句的格式_第四节 Python控制语句
  6. css3的新特性transform,transition,animation
  7. [leetcode]102.二叉树的层序遍历
  8. 编写程序处理一个 string 类型的 list 容器。在该容器9.27:中寻找一个特殊值,如果找到,则将它删除掉。用 deque容器重写上述程序。
  9. php基础 简书,PHP入门基础
  10. JavaScript 简介
  11. 收藏的一个关于C# ToString的方法集合
  12. android 关闭jack_安卓编译 Jack server 错误问题解决办法
  13. Visual Studio 2010下载 + 附破解方法
  14. Julia中的数据分析入门
  15. 红外数据集 | 收集OTCBVS、KAIST、FLIR红外图像数据
  16. 伟大的程序员同志们累了看看我这笑话,巨搞笑!
  17. 使用expdp和impdp导出导入本地oracle数据.dmp文件
  18. 关于DefaultHttpClient的作用已经被弃之后的新方法
  19. 「项目进度管理」如何编制有效的进度计划?
  20. 怎么把图片压缩到200K以内?如何在线压缩图片大小?

热门文章

  1. MacBook typora快捷键
  2. 点云的粗配准和精配准
  3. html5贝塞尔曲线,Canvas学习:贝塞尔曲线
  4. Sharding-jdbc实现读写分离、分库分表
  5. 台服大航海OL竟然要合服?!看来要稍微应付一下了……
  6. 传说ol服务器端网站源码,千古传说一键服务端+IP修改+GM+ID+搭建教程
  7. 最全SparkStreaming实践
  8. mysql数据库sql优化_MySQL 数据库性能优化之SQL优化
  9. 【轻松一刻】Java制作字符动画
  10. layui 日期重置_layui前段框架日期控件使用方法详解