`
minglaihan
  • 浏览: 16585 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

java 鼠标简单控制和浮点数在内存中的表示方式

 
阅读更多
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

有点混乱,自己认真整理一下就好了

分享到:
评论

相关推荐

    Java开发技术大全(500个源代码).

    realExample.java 演示浮点数的有效位数 remainder.java 取余运算示例 showBreak.java 利用标号语句跳转出所有循环嵌套 showCount.java 循环计数示例 showDoubleLoop.java 演示双重循环 showDoubleLoopSe.java...

    java中常用英语.pdf

    7. **Interface**:接口是Java中定义行为的一种方式,它只包含抽象方法和常量。一个类可以实现多个接口。 8. **Package**:包是Java中的命名空间管理机制,用于组织类和接口,避免命名冲突,并提供访问控制。 9. *...

    java设计性实验报告

    JVM还负责内存管理、线程调度、异常处理等关键任务,确保Java程序的安全性和高效性。 #### Swing框架 Swing是Java的一个图形用户界面(GUI)工具包,用于构建桌面应用程序。它提供了丰富的组件集合,如按钮、...

    Java常用单词表.pdf

    标题为《Java常用单词表.pdf》的文档中,内容涉及了大量Java编程语言的核心概念和关键词汇。以下是对该部分内容的详细解读,按照知识的类别和用途进行区分。 1. 基础关键字和类型: - Java中的关键字用于执行特定...

    2008年10月自考java程序设计(一)试卷

    17. 在Java的绘图中,"异或模式"绘图会导致颜色反转,如果背景和绘制颜色相同,实际颜色为这两种颜色的异或结果。 18. 线程控制包括编写run()方法定义线程执行逻辑,以及通过Thread构造器或实现Runnable接口创建...

    java考试复习题本科.pdf

    6. **Java程序类型**:Java有Application和Applet两类程序,Applet通常在Web浏览器中运行,而Application可以有图形界面或字符界面。 7. **异常处理**:try块中的异常可以被一个或多个catch块捕获,catch块可以按...

    王道训练营(for JAVA方向)开营前需掌握的编程基础知识(1).pdf

    这在计算机科学中,尤其是在处理低级编程和内存地址表示时非常有用。 4. 程序编译流程:理解程序从源代码编译成机器码,再到最终执行的过程。这是程序员必须掌握的基础知识,了解编译器如何工作和优化代码对于编写...

    java网络编程基础习题+部分答案

    - `java.lang` 包中的类和接口是 Java 编程语言的基础,包含了如 `Object`、`String` 等核心类,这些类在使用时不需显式导入。 **15. 计算角度的余弦值** - **选项分析:** - A)doubled=Math.cos(42);:错误,...

    4747 Java语言程序设计(一)

    - **小应用程序**:嵌入网页中的Java程序,使用`&lt;applet&gt;`标签在浏览器中运行。随着现代Web技术的发展,这种方式已经逐渐被弃用。 **1.4 JAVA源文件的命名规则** - 源文件名必须与公共类名相同。 - 文件扩展名为`....

    java资料面试题

    #### 2.16 在实现 x 和 y 相加时,x += y 和 x = x + y 两种实现方式有区别吗? 在大多数情况下,两者效果相同。然而,当涉及到不可变对象时,如 `String`,`x += y` 会产生多个临时对象,而 `x = x + y` 则不会。 ...

    java学习之英文词汇

    19. **Before**: 在……之前,逻辑判断的一种表达方式。 20. **Now**: 现在,获取当前时间的常用方式。 21. **Weight**: 重量,物理属性之一。 22. **Height**: 高度,物理属性之一。 23. **Boolean**: 布尔类型,...

    JAVA程序员常用英语

    - **North**(北方): 方向之一,在程序设计中可能用于表示方位。 - **Null**(空的): 表示没有值或引用的对象。 #### O. 输入输出与对象 - **Output**(输出): 程序产生的结果或信息。 - **Object**(对象): ...

    计算机公共基础(教案).pdf

    在计算机中,数值有不同的表示方式,如定点数和浮点数,以及原码、反码和补码的概念,这些都是理解计算机如何存储和处理数值的关键。 信息编码是计算机处理数据的基础,包括数字编码(如BCD码)和字符编码(如ASCII...

    Circle2D_java_circle2D_

    在Java编程语言中,`Circle2D`是一个用于表示二维平面上圆的抽象类,它位于`java.awt.geom`包中。本教程将深入探讨Java中的`Circle2D`类,以及如何使用它来实现基本的图形设计和计算。这个教程共分为9个章节,涵盖了...

    2008年10月全国自考Java语言程序设计(一)真题及答案

    2. **浮点数运算**:在Java中,整数除法会返回整数部分,因此`x/2`会得到26,而与1.0相加后会向下取整,结果为26.0,不是27.5。所以答案是A。 3. **成员变量与局部变量**:在类A中,`x`是实例变量,`y`是类变量...

    打地鼠代码和素材

    在本压缩包中,我们找到了实现打地鼠游戏的Java源代码,以及相关的素材资源,包括地鼠、锤子和地图图片。这些内容为我们提供了一个完整的打地鼠游戏开发框架,下面将详细探讨其中涉及的IT知识点。 1. **Java编程...

    2021-2022计算机二级等级考试试题及答案No.17472.docx

    25. 占用内存最小的数据类型:在多数编程语言中,Boolean类型通常占用的内存是最小的,因为它只需要存储真或假两种状态。 以上是对计算机二级等级考试中涉及知识点的详细解释,涵盖了数据结构、计算机硬件、数据库...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    最全的java面试题,绝对有用

    `final`关键字在Java中用于表示不可变性,主要用途包括: - 定义常量。 - 创建不可变类。 - 确保方法不可被重写。 ### 17. HashMap 与 Hashtable - **HashMap**:允许键和值为null,线程非安全。 - **Hashtable**:...

Global site tag (gtag.js) - Google Analytics