您的位置:首页 > 其它

JPanel及其他控件中鼠标拖动画选择框

2009-08-25 11:19 381 查看
响应鼠标按下事件,记录起始点到全局变量

响应鼠标拖动事件,启用XOR模式,绘制前一个矩形(抹除前一个矩形),新建一个矩形并绘制(当前矩形);新建矩形的算法有多种,以下采用的算法适应各个方向上的拖动;注意使用XOR模式来抹除之前绘制的矩形,千万不要使用repaint方法。

响应鼠标释放时间,启用XOP模式抹除最后一次矩形

//起始点,鼠标按下时记录
Point pBegin;
//绘图矩形
Rectangle rect;

private JPanel getJPanelWaveBox() {
if (jPanelWaveBox == null) {
jPanelWaveBox = new JPanel();
jPanelWaveBox.setBounds(197, 12, 543, 344);
jPanelWaveBox.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent evt) {
Graphics2D g2 = (Graphics2D) jPanelWaveBox.getGraphics();
//启用XOR模式
g2.setXORMode(Color.white);
//绘制之前的矩形
if (rect != null) {
g2.draw(rect);
}
//绘制现在的矩形
rect = new Rectangle((int) Math.min(pBegin.getX(), evt.getPoint().getX()), (int) Math.min(pBegin.getY(), evt.getPoint().getY()), (int) Math.abs(pBegin.getX() - evt.getPoint().getX()),(int) Math.abs(pBegin.getY() - evt.getPoint().getY()));
g2.draw(rect);
g2.setPaintMode();
g2.dispose();
}
});
jPanelWaveBox.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent evt) {
try {
// 画选择框(实际效果为去掉)
Graphics2D g2 = (Graphics2D) jPanelWaveBox.getGraphics();
g2.setXORMode(Color.white);
g2.draw(rect);
g2.setPaintMode();
g2.dispose();
} catch (Exception e) {}
pBegin = null;
rect = null;
}
public void mousePressed(MouseEvent evt) {
pBegin = evt.getPoint();
jPanelWaveBox.requestFocus();
}
});
}
return jPanelWaveBox;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: