java记录鼠标按下的点,菜鸟请您指教!

问题如下,请高手指教:我用动态数组记录每次鼠标按下的点,然后画多边形,但出现问题:我在mousePressed里面记录每次鼠标按下的点,因此动态数组中每次的元素只有一个,... 问题如下,请高手指教:
我用动态数组记录每次鼠标按下的点,然后画多边形,但出现问题:
我在mousePressed里面记录每次鼠标按下的点,因此动态数组中每次的元素只有一个,也就是说不能累计记录所有点.这样就无法实现画多边形(多边形要多点集合)。
不知道您看明白我的意思没?请指教。
Graphics类,我知道,有DrawPlogon方法,关键在于要获取我按下的这些点才能画~

二楼的,你辛苦了,但是我只需要能够记录每次鼠标按下的点就可以啦,repaint是框架类自带的函数,你这样又来一个repaint()是不行的啊,系统运行时候报错了!怎么办啊?框架类的repaint我又不能改。
展开
 我来答
Raymondguo008
2009-05-02 · TA获得超过1634个赞
知道小有建树答主
回答量:887
采纳率:100%
帮助的人:495万
展开全部
我写的一个。给你。
\\MouseDrawPoint.java
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MouseDrawPoint extends Frame {

ArrayList<Point>points = null;

public static void main(String[] args) {
new MouseDrawPoint("鼠标画点");
}

public MouseDrawPoint(String s) {
super(s);
points = new ArrayList<Point>();
setBounds(200,200,400,300);
setBackground(Color.green);

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

this.addMouseListener(new MouseMonitor());
setVisible(true);
}

public void paint(Graphics g) {
Iterator<Point>i = points.iterator();
while(i.hasNext()) {
Point p = (Point)i.next();
g.setColor(Color.red);
g.fillOval(p.x,p.y,10,10);
}
}

public void addPoint(Point p) {
points.add(p);
}

class MouseMonitor extends MouseAdapter {
public void mousePressed(MouseEvent e) {
MouseDrawPoint f = (MouseDrawPoint)e.getSource();
f.addPoint(new Point(e.getX(),e.getY()));
f.repaint();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flymomo123
2009-05-02 · TA获得超过819个赞
知道小有建树答主
回答量:301
采纳率:0%
帮助的人:380万
展开全部
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class testPlogon extends Frame {

boolean start=false;
ArrayList <Point> pointList = new ArrayList <Point>();

public static void main(String[] args) {
testPlogon test = new testPlogon();
test.lanch();

}

public void lanch(){
this.setResizable(false);
this.setBounds(100,200,300,400);
this.setBackground(Color.white);
this.addMouseListener(new getPoint());
this.setTitle("drawPlogon");
Button draw = new Button("draw plogon");
Button clear = new Button("clear");
draw.setActionCommand("draw");
draw.addActionListener(new drawPlogonMonitoer());
clear.addActionListener(new drawPlogonMonitoer());
Panel tooBar = new Panel();
tooBar.add(draw);
tooBar.add(clear);
this.add(tooBar, BorderLayout.SOUTH);
this.addMouseListener(new getPoint());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
setVisible(true);
}

public void paint(Graphics g){
Iterator <Point> drawIt = pointList.iterator();
while(drawIt.hasNext()){
Point p = drawIt.next();
g.fillOval(p.getX(), p.getY(), 3, 3);
}
if(start){
int []xList = new int [pointList.size()];
int []yList = new int [pointList.size()];
for(int i=0;i<pointList.size();i++){
xList[i]=pointList.get(i).getX();
yList[i]=pointList.get(i).getY();
}
g.drawPolygon(xList,yList,pointList.size());
}

}

class drawPlogonMonitoer implements ActionListener{

public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="draw"){
start=true;
}
if(e.getActionCommand()=="clear"){
start=false;
pointList.clear();
}
repaint();
}

}

class getPoint extends MouseAdapter{

public void mousePressed(MouseEvent e) {
pointList.add(new Point(e.getX(),e.getY()));
repaint();
}

}

class Point{
int x,y;
Point(int x, int y){
this.x=x;
this.y=y;
}

public int getX(){
return x;
}

public int getY(){
return y;
}
}

}

搞定了。。但是好长。。。。应该可以缩减的但是懒得去搞了
还有会有一点点偏离画的点的圆心。。因为我没计算圆心。。
你也知道java 画圆的x,y 不是圆心的点所以看起来像偏离了
我故意用小一点的半径让他看不出来偏离了。。。你要想画的一点都不偏也很简单的。。自己去想把
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4c78494
2009-05-02 · TA获得超过482个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:179万
展开全部
嗯~你最好下一个那个叫什么什么G的
画东西的程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式