JAVA中调用paint()方法问题 高手进

importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasshuatuextendsJF... import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class huatu extends JFrame implements MouseListener {
int x1,x2,y1,y2;
Graphics x;
public huatu(){
this.setTitle("画图小程序");
this.addMouseListener(this);
this.setSize(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics x){
super.paint(x);
x.setColor(Color.BLUE);
if(x1<x2)
x.drawRect(x1,y1,x2-x1,y2-y1);
if(x1>x2)
x.drawRect(x2,y2,x1-x2,y1-y2);
}
public static void main(String[] args) {
new huatu();
}
public void mouseClicked(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {
// TODO 自动生成方法存根

}

public void mouseExited(MouseEvent e) {
// TODO 自动生成方法存根

}

public void mousePressed(MouseEvent e) {
x1=e.getX();y1=e.getY();

}

public void mouseReleased(MouseEvent e) {
x2=e.getX();y2=e.getY();
x=this.getGraphics();
x.setColor(Color.BLUE);
if(x1<x2)
x.drawRect(x1,y1,x2-x1,y2-y1);
if(x1>x2)
x.drawRect(x2,y2,x1-x2,y1-y2);
}

}
我想的效果是每次更改JFrame窗口的大小都能保留原来画的所有矩形,而以上代码只能实现保留最后一次的画的矩形!请哪位高手赐教啊,小弟着这里谢谢了!
展开
 我来答
百度网友8b41f47ef
2009-03-06 · TA获得超过229个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:181万
展开全部
super.paint()的作用是把当前的区域清空,每次resize的时候就会自动调用paint()方法,paint()方法里先调用了super.paint()清空当前区域,再画一个矩型筐,当然每次只有一个了。

另外你的算法也有漏洞,当你想从右上角拉到左下角画矩形的时候是没有反应的。

下面这个程序修改了只画一个的错误,改进了右上角拉到左下角的漏洞,还增加了拖动的中间过程。没时间给你写注释,自己看吧。

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

import javax.swing.*;
public class Hello extends JFrame implements MouseListener,MouseMotionListener{
int x1,y1;
Vector<Rectangle> rectangles=null;
public Hello(){
this.setTitle("画图小程序");
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setSize(400,400);
rectangles=new Vector<Rectangle>();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.BLUE);
for(int i=0;i<rectangles.size();i++){
Rectangle rec=rectangles.get(i);
int tmp_x=rec.x;
int tmp_y=rec.y;
int tmp_w=rec.width;
int tmp_h=rec.height;
g.drawRect(tmp_x,tmp_y,tmp_w,tmp_h);
}
}
public static void main(String[] args) {
new Hello();
}
public void mouseClicked(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {
x1=e.getX();y1=e.getY();

}

public void mouseReleased(MouseEvent e) {
int x2=e.getX();
int y2=e.getY();
int x=0;
int y=0;
Graphics g=this.getGraphics();
g.setColor(Color.BLUE);
int tmp_w=0;
int tmp_h=0;
if(x1<x2){
x=x1;
tmp_w=x2-x1;
}
else if(x1>x2){
x=x2;
tmp_w=x1-x2;
}

if(y1<y2){
y=y1;
tmp_h=y2-y1;
}else if(y1>y2){
y=y2;
tmp_h=y1-y2;
}
rectangles.add(new Rectangle(x,y,tmp_w,tmp_h));
this.repaint();
}

public void mouseDragged(MouseEvent e) {
int x2=e.getX();
int y2=e.getY();
int x=0;
int y=0;
Graphics g=this.getGraphics();
g.setColor(Color.BLUE);
int tmp_w=0;
int tmp_h=0;
if(x1<x2){
x=x1;
tmp_w=x2-x1;
}
else if(x1>x2){
x=x2;
tmp_w=x1-x2;
}

if(y1<y2){
y=y1;
tmp_h=y2-y1;
}else if(y1>y2){
y=y2;
tmp_h=y1-y2;
}
paint(g);
g.drawRect(x,y,tmp_w,tmp_h);
}

public void mouseMoved(MouseEvent e) {

}

}
spacelishuai
2009-03-06 · TA获得超过387个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:303万
展开全部
你要建一个矩形类,把每次画的矩形保存在一个List中,每次刷新的时候重画List中所有的矩形
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式