`

SwingUtilities.convertPoint 方法的作用

阅读更多
SwingUtilities类是Swing组件内部使用的实用工具,它提供了许多的涉及计算、转换、访问控制、布局等方面的方法。这里我们只讨论它的一个方法public static Point convertPoint(Component source,Point aPoint,Component destination) ;要想理解这个方法,利用图形的方式是最好不过了。如下图:

我们假设最大的容器Container为destination,显示图像的JLabel为source,我们给source增加鼠标监听事件,那么aPoint是指鼠标在source的位置。当我们点击图片上箭头指的位置,aPoint的x值和y值都为0,Pont destPoint = SwingUtilities.convertPoint(Component source,Point aPoint,Component destination) ;destPoint的x值和y值分别是:39 和 86。

我们再用程序来解释这个方法。我们给Component source增加鼠标监听方法,当有鼠标点击source的左上角(上图箭头所指位置)时,触发public void mousePressed(MouseEvent event)方法,我们通过event拿到aPoint,然后我们就可以拿到aPoint的x(event.getPoint().x)和y(event.getPoint().y)值,根据上图他们分别是0,0;而destPoint的值,则是39,86
public void mousePressed(MouseEvent event) {
			// 得到当前坐标点
			destPoint = SwingUtilities.convertPoint(dragPicLabel, event.getPoint(),
					dragPicLabel.getParent());
			// 点击source的左上角(图片上箭头指向),输出 0:0
			System.out.println(event.getPoint().x + " : " + event.getPoint().y);
			// 点击source的左上角(图片上箭头指向),输出 39 : 86
			System.out.println(destPoint.x + " : " + destPoint.y);
		}

现在明白了吧,SwingUtilities.convertPoint(Component source,Point aPoint,Component destination) 的目的就是将坐标系的原点从source转移到destination。根据原来的鼠标位置aPoint,获得坐标转以后的鼠标位置destPoint。这个方法在获得鼠标移动距离,画坐标系,划线时会经常用到。

文章地址:http://javapub.iteye.com/blog/739146
2
1
分享到:
评论
1 楼 willse 2012-03-16  
呵呵,不错!挺有意思的哦。

相关推荐

    Swing线程之SwingUtilities.invoke

    Swing线程之SwingUtilities.invokeLater解释Java开发Java经验技巧共7页.pdf.zip

    Swing 线程之SwingUtilities invokeLater docx

    Swing 线程之SwingUtilities invokeLater docx

    简单的排球比赛计分系统,使用Java Swing实现

    程序创建一个窗口,包含输入分数的文本框、计分按钮、查询按钮、显示比分的文本区域和退出按钮。用户可以通过输入分数进行计分,通过查询按钮...最后,通过SwingUtilities.invokeLater方法确保在正确的线程中运行程序。

    基于Swing的打砖块游戏的Java程序

    程序通过创建Ball、Paddle和Block类来实现游戏的运行逻辑,其中...程序的入口 main 方法通过调用 SwingUtilities.invokeLater 方法来创建一个线程并运行 BreakBlockGame 类,以避免在主线程中创建和显示 Swing 组件。

    java Swing的使用.docx

    在main方法中,我们使用SwingUtilities.invokeLater方法在事件分派线程中创建了一个MyFrame对象。这是为了确保Swing应用程序在正确的线程中运行,避免出现并发访问问题。 Swing还提供了许多其他的GUI组件和功能,如...

    用java实现的一个俄罗斯方块游戏

    程序首先创建一个TetrisGame对象,并设置游戏窗口的标题、大小、关闭方式和不可调节大小。...最后,创建一个SwingUtilities.invokeLater方法来延迟执行创建TetrisGame对象的代码,确保游戏界面的正确显示。

    Java制作多种风格的窗口界面一例.rar

    Java制作多种风格的窗口界面一例,虽然这种界面风格不是太漂亮,但展示了如何实现多风格窗口的变化,如果你的美工不错,可以设计出更漂亮... javax.swing.SwingUtilities.updateComponentTreeUI(this); //更新界面  }

    java日期时间选择

    SwingUtilities.updateComponentTreeUI(frame); com.qt.datapicker.DateTimePanel dateTimePanel = new com.qt.datapicker.DateTimePanel(true); frame.getContentPane().add(dateTimePanel); //dateTimePanel....

    基于swing的java猜数字游戏代码.zip

    在main()方法中,通过SwingUtilities.invokeLater()方法启动主界面,确保界面在事件分派线程(Event Dispatch Thread)中创建和显示。 注意:此示例只是一个简单的演示,没有包括输入验证和错误处理等完整的功能。...

    substance5.3已编译

    Substance (https://substance.dev.java.net)有很多的外观可以选择,而且都很漂亮,还提供了强大的API供开发者使用。 在设置外观时请把UIManager.set...SwingUtilities.invokeLater(new Runnable() {}的run方法中。

    substance.jar

    JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); java.awt.EventQueue.invokeLater(new Runnable() { ...SwingUtilities.updateComponentTreeUI(comm); }// end if

    Substance5.3已编译的jar文件

    Substance (https://substance.dev.java.net)有很多的外观可以选择,而且都很漂亮,还提供了强大的API供...SwingUtilities.invokeLater(new Runnable() {}的run方法中。 这个上传错了,可是我不知道怎么删,唉。

    贝叶斯主观推理算法java源码

    SwingUtilities.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager. getSystemLookAndFeelClassName()); } catch (Exception exception) { exception....

    项目源码-java酒店管理系统

    import javax.swing.SwingUtilities; import javax.swing.UIManager; import com.mwq.frame.LandFrame; public class DrinkeryManage { public DrinkeryManage() { // Center the window Toolkit toolkit = ...

    java pdf 查看器

    import javax.swing.SwingUtilities; import com.sun.pdfview.action.GoToAction; import com.sun.pdfview.action.PDFAction; import java.lang.reflect.InvocationTargetException; /** * A demo PDF Viewer ...

    java课程设计学生信息管理系统(1).doc

    " "public static void main(String[] args) { " "SwingUtilities.invokeLater(new Runnable() { " "public void run() { " "StudentJFrame inst = new StudentJFrame(); " "inst.setLocationRelativeTo(null); " ...

    聊天系统计算机相关论文

    SwingUtilities.updateComponentTreeUI(this); } catch (Exception e) { e.printStackTrace(); } } 5. 该服务器端自动处理事件的代码: 事件1:关闭聊天室客户端事件 protected ...

    MUtilities:MATLAB 访问选定的 Java SwingUtilities、AWTUtilities 和 HG 对象的类似函数-matlab开发

    MUtilities 是一个 MATLAB 类,它提供一组静态方法,类似于 Java SwingUtilities 和新的 AWTUtilities 集合中的一些方法,并包括其中的一些方法。 -------------------------------------------------- -----------...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    画圆,画椭圆还是画矩形的方法,它们都有一个相同的方法名,但以不同的方式完成他们的 画圆的功能。 1.8 类和对象 1.8.1 类 类是组成 Java 程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的 原型...

    小型简单的记事本程序

    import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; ...public static void main(String[] args){ ...///////////////////////////myfr主窗体类////////////////...

Global site tag (gtag.js) - Google Analytics