yipinhanxin 2010-08-09 11:03
浏览 183
已采纳

书上的例子,麻烦解释下

[code="java"]
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;

public class MouseTest{
public static void main(String args[]){
MouseFrame mf = new MouseFrame();
mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mf.setVisible(true);
}
}

class MouseFrame extends JFrame{
public MouseFrame(){
setTitle("MouseTest");
setLocation(300,300);
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
MousePanel mp = new MousePanel();
getContentPane().add(mp);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}

class MousePanel extends JPanel{
private ArrayList squares;
private Rectangle2D current;
private static final int SIDELENGTH = 10;
public MousePanel(){
squares = new ArrayList();
current = null;
addMouseListener(new MouseHandler());
// addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 =(Graphics2D)g;
for(Rectangle2D r : squares){
g2.draw(r);
}
}
public Rectangle2D find(Point2D p){
for(Rectangle2D r : squares){
if(r.contains(p)){
return r;
}
}
return null;
}
public void add(Point2D p){
double x = p.getX();
double y = p.getY();
current = new Rectangle2D.Double(
x - SIDELENGTH/2,
y - SIDELENGTH/2,
SIDELENGTH,
SIDELENGTH);
squares.add(current);

repaint();
}
public void remove(Rectangle2D s){
if(s == null)return;
if(s == current)current = null;

//这个if判断什么意思,起到什么作用?
squares.remove(s);
repaint();
}
private class MouseHandler extends MouseAdapter{
public void mousePressed(MouseEvent e){
//add a new square if the cursor isn't inside a square
current = find(e.getPoint());
if(current == null){
add(e.getPoint());
}
}
public void mouseClicked(MouseEvent e){
//remove the current square if double clicked
current = find(e.getPoint());
if(current!=null&&e.getClickCount()>=2){
remove(current);
}
}

}
// private class MouseMotionHandler implements MouseMotionListener{
// public void mouseMoved(MouseEvent e){
//

// }
// public void mouseDragged(MouseEvent e){
//

// }
// }
}
[/code]
这是书上一个例子的部分程序,请问注释处的if啥意思?不就是把curent传给s嘛?s和此时的current本来就是相等的啊,为什么还要判断?

  • 写回答

8条回答

  • iteye_2443 2010-08-10 09:06
    关注

    跟多线程无关。。。看来你还是没懂俺的意思。。。
    如果我传入一个参数,要删除,但是这个参数不是当前的,那么当前的是否为空?显然不是,就这么简单

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办