其实问题很简单,只是写代码太累了,给你点思路吧1.定义一个三角形类
class Triangle
{
Point p1,p2,p3; //三个顶点
......
public void draw(Graphics g)
{
//划三条线连接成三角形
}
public boolean inPoint1(Point p) //判断参数p是否在顶点1的小圆里
{
......
}
public boolean inPoint2(Point p) //判断参数p是否在顶点2的小圆里
{
......
}
public boolean inPoint3(Point p) //判断参数p是否在顶点3的小圆里
{
......
}
}2.定义一个JFrame上面放一个Panel用来画三角形,同时监听鼠标事件
class AFrame extends JFrame implements MouseListener ,MouseMotionListener
{
//具体实现省略了,只给出监听思路
public void mouseClicked(MouseEvent e)
{
if(tr.inPoint1(e.getPoint))
{
//鼠标点在第1个顶点,做个标记是1
}
if(tr.inPoint2(e.getPoint))
{
//鼠标点在第2个顶点,做个标记是2
}
if(tr.inPoint3(e.getPoint))
{
//鼠标点在第3个顶点,做个标记是3
}
}
//鼠标移动事件监听
public void mouseDragged(MouseEvent e)
{
if(标记是1)
{ tr.p1 = e.getPoint();
tr.draw(g1); //g1是Panel的Graphics
}
if(标记是2)
{ tr.p2 = e.getPoint();
tr.draw(g1); //g1是Panel的Graphics
}
if(标记是3)
{ tr.p3 = e.getPoint();
tr.draw(g1); //g1是Panel的Graphics
}
}
}大概思路是这样了,你在研究一下吧!
class Triangle
{
Point p1,p2,p3; //三个顶点
......
public void draw(Graphics g)
{
//划三条线连接成三角形
}
public boolean inPoint1(Point p) //判断参数p是否在顶点1的小圆里
{
......
}
public boolean inPoint2(Point p) //判断参数p是否在顶点2的小圆里
{
......
}
public boolean inPoint3(Point p) //判断参数p是否在顶点3的小圆里
{
......
}
}2.定义一个JFrame上面放一个Panel用来画三角形,同时监听鼠标事件
class AFrame extends JFrame implements MouseListener ,MouseMotionListener
{
//具体实现省略了,只给出监听思路
public void mouseClicked(MouseEvent e)
{
if(tr.inPoint1(e.getPoint))
{
//鼠标点在第1个顶点,做个标记是1
}
if(tr.inPoint2(e.getPoint))
{
//鼠标点在第2个顶点,做个标记是2
}
if(tr.inPoint3(e.getPoint))
{
//鼠标点在第3个顶点,做个标记是3
}
}
//鼠标移动事件监听
public void mouseDragged(MouseEvent e)
{
if(标记是1)
{ tr.p1 = e.getPoint();
tr.draw(g1); //g1是Panel的Graphics
}
if(标记是2)
{ tr.p2 = e.getPoint();
tr.draw(g1); //g1是Panel的Graphics
}
if(标记是3)
{ tr.p3 = e.getPoint();
tr.draw(g1); //g1是Panel的Graphics
}
}
}大概思路是这样了,你在研究一下吧!
public interface Figure{
public void draw(Graphics g);
public List getHandlers(); //取得图的handler
public boolean isInside(int x,int y);//判断一个点是否在内部
}
public interface Handler{
public void draw(Graphics g);
public Figure getOwner(); //取得Handler的拥有者
public boolean isInside(int x,int y); //判断一个点是否在Handler内部
}
public interface Tool{
public void mouseDown(MouseEvent e, int x, int y);
public void mouseDrag(MouseEvent e, int x, int y);
public void mouseUp(MouseEvent e, int x, int y);
public void mouseMove(MouseEvent evt, int x, int y);
}
public class Drawing extends JPanel implements MouseListener,ActionListener{
private List figList;
private Figure selectedFigure;
private Tool selectedTool;
public Drawing(){
...
addMouseListener()
...
}
根据selectedTool和selectedFigure决定鼠标事件的结果
}
需要实现一个TriangleFigure
两个Tool: SelectionTool和TriangleTool
这两个tool跟两个button相关联,并且两个button是互斥的,只能选一个