import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
public class MouseTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
MouseFrame frame = new MouseFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class MouseFrame extends JFrame
{
public MouseFrame()
{
setTitle("MouseTest");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
MouseComponent component = new MouseComponent();
add(component);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}
class MouseComponent extends JComponent
{
public MouseComponent()
{
squares = new ArrayList<Rectangle2D>();
current = null;
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics 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;
squares.remove(s);
repaint();
}
private static final int SIDELENGTH = 10;
private ArrayList<Rectangle2D> squares;
private Rectangle2D current;
private class MouseHandler extends MouseAdapter
{
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 MouseMotionListener
{
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-SIDELENGTH/2, SIDELENGTH, SIDELENGTH);
repaint();
}
}
}
}
1.结合鼠标事件和swing 2D图形技术的简单运用,可以利用鼠标的单击或双击完成相应操作 。
简单功能为,单击鼠标就可以在窗口上出现一个小正方形,双击即可删除,按住可以拖动。
PS:可以利用这些悄悄的写下你心爱的人的名字哦~~虽然字看起来歪歪斜斜的,不过证明心意嘛~~嘿嘿
2.浮点数在内存中的表示方式
这个要认真理解,我花了将近一个小时的时间
首先是在JDK中了解Float中的intBitsToFloat方法的含义。
s * m * 2^(e-150)
s为符号位,int s = ((bits & 31 ) == 0)? 1:-1 0表示为正。
e表示存储在内存中的23位到31位bits,作为幂指数。 int e =(bits>> 23)& 0xff
m表示存储在内存中的0到22位bits,作为有效位。 int m = (e == 0)? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
例如,计算0x50000000的对应的浮点数
s=0;
e 后23位有效位与0xff相与之后结果为 10100000 结果为160
m 与 0x800000相或后结果为2^23
所以结果为2^33
有点混乱,自己认真整理一下就好了
分享到:
相关推荐
realExample.java 演示浮点数的有效位数 remainder.java 取余运算示例 showBreak.java 利用标号语句跳转出所有循环嵌套 showCount.java 循环计数示例 showDoubleLoop.java 演示双重循环 showDoubleLoopSe.java...
7. **Interface**:接口是Java中定义行为的一种方式,它只包含抽象方法和常量。一个类可以实现多个接口。 8. **Package**:包是Java中的命名空间管理机制,用于组织类和接口,避免命名冲突,并提供访问控制。 9. *...
JVM还负责内存管理、线程调度、异常处理等关键任务,确保Java程序的安全性和高效性。 #### Swing框架 Swing是Java的一个图形用户界面(GUI)工具包,用于构建桌面应用程序。它提供了丰富的组件集合,如按钮、...
标题为《Java常用单词表.pdf》的文档中,内容涉及了大量Java编程语言的核心概念和关键词汇。以下是对该部分内容的详细解读,按照知识的类别和用途进行区分。 1. 基础关键字和类型: - Java中的关键字用于执行特定...
17. 在Java的绘图中,"异或模式"绘图会导致颜色反转,如果背景和绘制颜色相同,实际颜色为这两种颜色的异或结果。 18. 线程控制包括编写run()方法定义线程执行逻辑,以及通过Thread构造器或实现Runnable接口创建...
6. **Java程序类型**:Java有Application和Applet两类程序,Applet通常在Web浏览器中运行,而Application可以有图形界面或字符界面。 7. **异常处理**:try块中的异常可以被一个或多个catch块捕获,catch块可以按...
这在计算机科学中,尤其是在处理低级编程和内存地址表示时非常有用。 4. 程序编译流程:理解程序从源代码编译成机器码,再到最终执行的过程。这是程序员必须掌握的基础知识,了解编译器如何工作和优化代码对于编写...
- `java.lang` 包中的类和接口是 Java 编程语言的基础,包含了如 `Object`、`String` 等核心类,这些类在使用时不需显式导入。 **15. 计算角度的余弦值** - **选项分析:** - A)doubled=Math.cos(42);:错误,...
- **小应用程序**:嵌入网页中的Java程序,使用`<applet>`标签在浏览器中运行。随着现代Web技术的发展,这种方式已经逐渐被弃用。 **1.4 JAVA源文件的命名规则** - 源文件名必须与公共类名相同。 - 文件扩展名为`....
#### 2.16 在实现 x 和 y 相加时,x += y 和 x = x + y 两种实现方式有区别吗? 在大多数情况下,两者效果相同。然而,当涉及到不可变对象时,如 `String`,`x += y` 会产生多个临时对象,而 `x = x + y` 则不会。 ...
19. **Before**: 在……之前,逻辑判断的一种表达方式。 20. **Now**: 现在,获取当前时间的常用方式。 21. **Weight**: 重量,物理属性之一。 22. **Height**: 高度,物理属性之一。 23. **Boolean**: 布尔类型,...
- **North**(北方): 方向之一,在程序设计中可能用于表示方位。 - **Null**(空的): 表示没有值或引用的对象。 #### O. 输入输出与对象 - **Output**(输出): 程序产生的结果或信息。 - **Object**(对象): ...
在计算机中,数值有不同的表示方式,如定点数和浮点数,以及原码、反码和补码的概念,这些都是理解计算机如何存储和处理数值的关键。 信息编码是计算机处理数据的基础,包括数字编码(如BCD码)和字符编码(如ASCII...
在Java编程语言中,`Circle2D`是一个用于表示二维平面上圆的抽象类,它位于`java.awt.geom`包中。本教程将深入探讨Java中的`Circle2D`类,以及如何使用它来实现基本的图形设计和计算。这个教程共分为9个章节,涵盖了...
2. **浮点数运算**:在Java中,整数除法会返回整数部分,因此`x/2`会得到26,而与1.0相加后会向下取整,结果为26.0,不是27.5。所以答案是A。 3. **成员变量与局部变量**:在类A中,`x`是实例变量,`y`是类变量...
在本压缩包中,我们找到了实现打地鼠游戏的Java源代码,以及相关的素材资源,包括地鼠、锤子和地图图片。这些内容为我们提供了一个完整的打地鼠游戏开发框架,下面将详细探讨其中涉及的IT知识点。 1. **Java编程...
25. 占用内存最小的数据类型:在多数编程语言中,Boolean类型通常占用的内存是最小的,因为它只需要存储真或假两种状态。 以上是对计算机二级等级考试中涉及知识点的详细解释,涵盖了数据结构、计算机硬件、数据库...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
`final`关键字在Java中用于表示不可变性,主要用途包括: - 定义常量。 - 创建不可变类。 - 确保方法不可被重写。 ### 17. HashMap 与 Hashtable - **HashMap**:允许键和值为null,线程非安全。 - **Hashtable**:...