一个程序 要求功能是在面板上绘制矩形,鼠标第一下点击记录矩形的左上角,鼠标第二下点击记录矩形右下角,绘制出矩形
我写的程序没有语句错误,但执行结果却和初衷相差十万八千里 -_-!
麻烦大家帮我看看
对于向点击鼠标事件,如果是相同的处理结果比较好办,比如点击一下出现一个点,但是如果前后两次甚至三次、四次点击不一样,那样该怎么处理?
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;public class toDrawRecent
{ public static void main(String[] args)
{ AFrame frame=new AFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}class AFrame extends JFrame
{ public AFrame()
{
setTitle("toDrawDectangle");
setSize(framewidth,frameheight);
AnPanel panel=new AnPanel();
Container contentPane=getContentPane();
contentPane.add(panel);
}
public static final int framewidth=300;
public static final int frameheight=200;
}class AnPanel extends JPanel
{
public AnPanel()
{
squarse=new ArrayList();
FirstPointArrayList=new ArrayList();
current=null;
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(int i=0;i<squarse.size();i++)
g2.draw((Rectangle2D)squarse.get(i));
}
public Point2D FirstPoint(Point2D p)
{
return p;
}
public Point2D SecondPoint(Point2D p)
{
return p;
}
public void find(Point2D p)
{
if(p==(Point2D)FirstPointArrayList.get(times-2))
{
FirstPointArrayList.remove(times-1);
times--;
FirstPointFind();
}
else
{
add((Point2D)FirstPointArrayList.get(times-2),(Point2D)FirstPointArrayList.get(times-1));
}
}
public Point2D FirstPointFind()
{
return null;
}
public void add(Point2D p1,Point2D p2)
{
double firstPointX=p1.getX();
double firstPointY=p1.getY();
double secondPointX=p2.getX();
double secondPointY=p2.getY();
double width=0;
double height=0;
double X=0;
double Y=0;
if(secondPointX > firstPointX)
{
width=secondPointX - firstPointX;
X=firstPointX;
}
else
{
width=firstPointX - secondPointX;
X=secondPointX;
}
if(secondPointY > firstPointY)
{
width=secondPointY - firstPointY;
Y=firstPointY;
}
else
{
width=firstPointY - secondPointY;
Y=secondPointY;
}
current=new Rectangle2D.Double(X,Y,width,height);
squarse.add(current);
repaint();
}
private ArrayList squarse;
private ArrayList FirstPointArrayList;
private Rectangle2D current;
private static int times=0;
private class MouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
Point FirstPoint=event.getPoint();
FirstPointArrayList.add(FirstPoint);
times++;
if(times==1)
FirstPointFind();
else
find(FirstPoint);
}
}
private class MouseMotionHandler implements MouseMotionListener
{
public void mouseMoved(MouseEvent event)
{
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
}
public void mouseDragged(MouseEvent event)
{
}
}
}
我写的程序没有语句错误,但执行结果却和初衷相差十万八千里 -_-!
麻烦大家帮我看看
对于向点击鼠标事件,如果是相同的处理结果比较好办,比如点击一下出现一个点,但是如果前后两次甚至三次、四次点击不一样,那样该怎么处理?
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;public class toDrawRecent
{ public static void main(String[] args)
{ AFrame frame=new AFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}class AFrame extends JFrame
{ public AFrame()
{
setTitle("toDrawDectangle");
setSize(framewidth,frameheight);
AnPanel panel=new AnPanel();
Container contentPane=getContentPane();
contentPane.add(panel);
}
public static final int framewidth=300;
public static final int frameheight=200;
}class AnPanel extends JPanel
{
public AnPanel()
{
squarse=new ArrayList();
FirstPointArrayList=new ArrayList();
current=null;
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(int i=0;i<squarse.size();i++)
g2.draw((Rectangle2D)squarse.get(i));
}
public Point2D FirstPoint(Point2D p)
{
return p;
}
public Point2D SecondPoint(Point2D p)
{
return p;
}
public void find(Point2D p)
{
if(p==(Point2D)FirstPointArrayList.get(times-2))
{
FirstPointArrayList.remove(times-1);
times--;
FirstPointFind();
}
else
{
add((Point2D)FirstPointArrayList.get(times-2),(Point2D)FirstPointArrayList.get(times-1));
}
}
public Point2D FirstPointFind()
{
return null;
}
public void add(Point2D p1,Point2D p2)
{
double firstPointX=p1.getX();
double firstPointY=p1.getY();
double secondPointX=p2.getX();
double secondPointY=p2.getY();
double width=0;
double height=0;
double X=0;
double Y=0;
if(secondPointX > firstPointX)
{
width=secondPointX - firstPointX;
X=firstPointX;
}
else
{
width=firstPointX - secondPointX;
X=secondPointX;
}
if(secondPointY > firstPointY)
{
width=secondPointY - firstPointY;
Y=firstPointY;
}
else
{
width=firstPointY - secondPointY;
Y=secondPointY;
}
current=new Rectangle2D.Double(X,Y,width,height);
squarse.add(current);
repaint();
}
private ArrayList squarse;
private ArrayList FirstPointArrayList;
private Rectangle2D current;
private static int times=0;
private class MouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
Point FirstPoint=event.getPoint();
FirstPointArrayList.add(FirstPoint);
times++;
if(times==1)
FirstPointFind();
else
find(FirstPoint);
}
}
private class MouseMotionHandler implements MouseMotionListener
{
public void mouseMoved(MouseEvent event)
{
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
}
public void mouseDragged(MouseEvent event)
{
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货