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条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站