import java.awt.*;
import java.awt.event.*;
import javax.swing.*;class MousePanel extends JPanel implements MouseListener
{ public MousePanel()
{ addMouseListener(new MouseAdapter()
{ public void mousePressed(MouseEvent evt)
{ int x = evt.getX();
int y = evt.getY();
current = find(x, y);
if (current < 0)
add(x, y);
}
public void mouseClicked(MouseEvent evt)
{ int x = evt.getX();
int y = evt.getY(); if (__________)
{ remove(current);
}
}
});
addMouseMotionListener(this);
}
public void paintComponent(Graphics g)
{ super.paintComponent(g);
for (int i = 0; i < nsquares; i++)
draw(g, i);
}
public int find(int x, int y)
{ for (int i = 0; i < nsquares; i++)
if (squares[i].x - SQUARELENGTH / 2 <= x &&
x <= squares[i].x + SQUARELENGTH / 2
&& squares[i].y - SQUARELENGTH / 2 <= y
&& y <= squares[i].y + SQUARELENGTH / 2)
return i;
return -1;
}
public void draw(Graphics g, int i)
{ g.drawRect(squares[i].x - SQUARELENGTH / 2,
squares[i].y - SQUARELENGTH / 2,
SQUARELENGTH,
SQUARELENGTH);
}
public void add(int x, int y)
{ if (nsquares < MAXNSQUARES)
{ squares[nsquares] = new Point(x, y);
current = nsquares;
nsquares++;
repaint();
}
}
public void remove(int n)
{ if (n < 0 || n >= nsquares) return;
nsquares--;
squares[n] = squares[nsquares];
if (current == n) current = -1;
repaint();
}
public void mouseMoved(MouseEvent evt)
{ }
public void mouseDragged(MouseEvent evt)
{}
private static final int SQUARELENGTH = 10;
private static final int MAXNSQUARES = 100;
private Point[] squares = new Point[MAXNSQUARES];
private int nsquares = 0;
private int current = -1;
}class MouseFrame extends JFrame
{ public MouseFrame()
{ setTitle("exam_18");
setSize(300, 200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); Container contentPane = getContentPane();
contentPane.add(new MousePanel());
}
}public class exam_18
{ public static void main(String[] args)
{ JFrame frame = new MouseFrame();
frame.show();
}
}
import java.awt.event.*;
import javax.swing.*;class MousePanel extends JPanel implements MouseListener
{ public MousePanel()
{ addMouseListener(new MouseAdapter()
{ public void mousePressed(MouseEvent evt)
{ int x = evt.getX();
int y = evt.getY();
current = find(x, y);
if (current < 0)
add(x, y);
}
public void mouseClicked(MouseEvent evt)
{ int x = evt.getX();
int y = evt.getY(); if (__________)
{ remove(current);
}
}
});
addMouseMotionListener(this);
}
public void paintComponent(Graphics g)
{ super.paintComponent(g);
for (int i = 0; i < nsquares; i++)
draw(g, i);
}
public int find(int x, int y)
{ for (int i = 0; i < nsquares; i++)
if (squares[i].x - SQUARELENGTH / 2 <= x &&
x <= squares[i].x + SQUARELENGTH / 2
&& squares[i].y - SQUARELENGTH / 2 <= y
&& y <= squares[i].y + SQUARELENGTH / 2)
return i;
return -1;
}
public void draw(Graphics g, int i)
{ g.drawRect(squares[i].x - SQUARELENGTH / 2,
squares[i].y - SQUARELENGTH / 2,
SQUARELENGTH,
SQUARELENGTH);
}
public void add(int x, int y)
{ if (nsquares < MAXNSQUARES)
{ squares[nsquares] = new Point(x, y);
current = nsquares;
nsquares++;
repaint();
}
}
public void remove(int n)
{ if (n < 0 || n >= nsquares) return;
nsquares--;
squares[n] = squares[nsquares];
if (current == n) current = -1;
repaint();
}
public void mouseMoved(MouseEvent evt)
{ }
public void mouseDragged(MouseEvent evt)
{}
private static final int SQUARELENGTH = 10;
private static final int MAXNSQUARES = 100;
private Point[] squares = new Point[MAXNSQUARES];
private int nsquares = 0;
private int current = -1;
}class MouseFrame extends JFrame
{ public MouseFrame()
{ setTitle("exam_18");
setSize(300, 200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); Container contentPane = getContentPane();
contentPane.add(new MousePanel());
}
}public class exam_18
{ public static void main(String[] args)
{ JFrame frame = new MouseFrame();
frame.show();
}
}
解决方案 »
- 怎样在eclipse下安装jasperreport插件
- swing能否实现这样的按钮点击?【紧急求助】
- ### 【光荣榜】感谢 kokobox 一段时间以来对Java版的共享,奖励专家分200
- 急,哪里出错!!!!
- CRC32验证 用java 对十六进制的字符串进行验证
- 逆蛇形数字方阵问题。。UP的有分。快来呀。。UP的有分。分不过再加
- 超急,请高手指教,在线等候,当场给分100
- 请问以下两种方式都把request发送出去了吗?
- 各位大侠:请问一台机器里能否同时安装JRun和JBuilder?会不会冲突?
- 请教高手,线程问题,怎样暂停或杀掉多线程?
- 关于jtree增加删除结点的问题,高手高手帮帮我
- java中匿名类和匿名对象是不是一回事啊
应该填find(x,y) >= 0,想要实现如下功能:
key words:
点击区域,在程序中就是以当前鼠标位置为中心,以SQUARELENGTH为边长的正方形。
使用mousePresssed方法跟踪鼠标按键按下的动作,按下后,根据当前坐标判断所属的
点击区域是不是已经记录,如果未记录就存入数组,再重画;
使用mouseClicked方法跟踪鼠标按键释放的动作,如果释放,则根据当前坐标判断所属
的点击区域是不是已经记录,如果记录就删除此区域,再重画;
运行时,你就会发现这样的情况:鼠标按下,然后移过SQUARELENGTH/2的位置再释放,
就会在面板上画出SQUARELENGTH见方的正方形;鼠标按下,没有移动到那么大位置就
看不到正方形;对于已有的正方形,在区域内点击,会清掉这个正方形。
不知道大家有没有别的想法:)