题库 题库

【简答题】

本题的功能是监听鼠标的操作。鼠标置于窗口中单击时(左键或右键),在单击的地方会画一个小矩形,如果将鼠标置于小矩形上,则鼠标光标状态改为小十字,按下鼠标左键可拖曳,双击鼠标左键(或右键)时,小矩形消失。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;
public class java3
{
public static void main(String[]args)
{
MouseFrame frame=new MouseFrame():
frame.setDefaultCloseOperation(JFrame.EXIT_
oN_CLOSE);
frame.show();
}
}
class MouseFrame extends JFrame
{
public MouseFrame()
{
setTitle("java3");
setSize(DEFAULT WIDTH, DEFAULT
HEIGHT):
MousePanel panel=new MousePanel();
Container contentPane=getContentPane();
contentPane.add(panel);
}
public static final int DEFAULT_WIDTH=300;
public static final int DEFAULT_HEIGHT=200;
}
class MousePanel extends JPanel
{
public MousePanel()
{
squares=new ArrayList();
current=null:
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHan-
dler());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(int i=0;i<SQUARES.SIZE();I++)
g2.draw((Rectangle2D)squares.get(i));
}
public void find(Point2D p)
{
for(int i=0;i<SQUARES.SIZE();I++)
{
Rectangle2D r=(Rectangle2D)squares.get(i);
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-SlDELENGTH/2.
S1DELENGTH,
SIDELENGTH);
squares.add(current);
repaint();
}
public void remove(Rectangle2D s)
{
if(S= =null)return:
if(S= =current)current=null;
squares.remove(s):
repaint();
}
private static final int SIDELENGTH=10:
private ArrayList squares;
private Rectangle2D current;
private class MouseHandter extends MouseAction-
Listener
{
public void mousePressed(MouseEvent event)
{
current=find(event.getPoint());
if(current= =null)
add(event.getPoint());
}
public void mouseClicked(MouseEvent event)
{
current=find(event.getPoint());
if(current!=null&&event.getClickCount()
>=2)
remove(current);
}
}
private class MouseMotionHandler implements Mouse-
MotionListener
{
public void mouseMoved(MouseEvent event)
{
if(find(event.getPoint)= =null)
setCursor(Cursor.getDefaultCursor());
else
setCursor(Cursor.getPredefinedCursor
(Cursor.CROSSHAIR_CURSOR));
}
public void mouseDragged(MouseEvent event)
{
if(current!=null)
{
int x=event.getX():
int Y=event.getY();
current.setFrame(
x-SIDELENGTH/2,
Y-SlDELENGTH/2.
SIDELENGTH,
SIDELENGTH);
repaint();
}
}
}
}

参考答案

第1处:puBliC RECtAnGlE2D FinD(Point2D p)
第2处:privAtE ClAss MousEHAnDlEr ExtEnDs MousEADAoptEr
第3处:FinD(EvEnt.GEtPoint())= =null

相关试题

单选题 下列Java组件中,不属于容器的是(  )。 查看答案
单选题 下列组件不能添加进Frame主窗口的是(  )。 查看答案
单选题 Java字节码文件的扩展名是(  )。 查看答案
单选题 已知一个有序线性表为(13,18,24,35,47,50,62,83,90。115,134),当用二分法查找值为90的元素时,查找成功的比较次数为(  )。 查看答案
单选题 int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是(  )。 查看答案
单选题 数据库应用系统中的核心问题是(  )。 查看答案
单选题 用于在子类中调用被重写父类方法的关键字是(  )。 查看答案
单选题 下面叙述中错误的是(  )。 查看答案
单选题 下面属于面向对象语言的是(  )。 查看答案
单选题 Java中所有类的父类是(  )。 查看答案
单选题 按层次次序将一棵有n-个结点的完全二叉树的所有结点从1~n编号,当i≤n/2时,编号为i的结点的左子树的编号是(  )。 查看答案
单选题 下列数中为八进制的是(  )。 查看答案
单选题 结构化程序设计的核心和基础是( )。 查看答案
单选题 在多线程并发程序设计中,能够给对象x加锁的语句是(  )。 查看答案
单选题 下列选项中属于Java语言的垃圾回收机制的一项是(  )。 查看答案
单选题 下列叙述中正确的是(  )。 查看答案
单选题 阅读下列代码:
public class Person{
static int arr[]=new int[10];
public static void main(String args){
System.out.println{arr[9]);
}
}
该代码的运行结果是(  )。
查看答案
单选题 当使用SomeThread t=new SomeThread()创建一个线程时,下列叙述中正确的是(  )。 查看答案
单选题 软件设计中划分模块的一个准则是(  )。 查看答案
单选题 Java API ee支持线程的类或接口是(  )。
Ⅰ.java.lang.Thread
Ⅱ.java.lang.Runnable
Ⅲ.java.lang.ThreadGroup
IV.java.io.Serializable
查看答案