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
分享到:
相关推荐
Swing线程之SwingUtilities.invokeLater解释Java开发Java经验技巧共7页.pdf.zip
Swing 线程之SwingUtilities invokeLater docx
程序创建一个窗口,包含输入分数的文本框、计分按钮、查询按钮、显示比分的文本区域和退出按钮。用户可以通过输入分数进行计分,通过查询按钮...最后,通过SwingUtilities.invokeLater方法确保在正确的线程中运行程序。
程序通过创建Ball、Paddle和Block类来实现游戏的运行逻辑,其中...程序的入口 main 方法通过调用 SwingUtilities.invokeLater 方法来创建一个线程并运行 BreakBlockGame 类,以避免在主线程中创建和显示 Swing 组件。
在main方法中,我们使用SwingUtilities.invokeLater方法在事件分派线程中创建了一个MyFrame对象。这是为了确保Swing应用程序在正确的线程中运行,避免出现并发访问问题。 Swing还提供了许多其他的GUI组件和功能,如...
程序首先创建一个TetrisGame对象,并设置游戏窗口的标题、大小、关闭方式和不可调节大小。...最后,创建一个SwingUtilities.invokeLater方法来延迟执行创建TetrisGame对象的代码,确保游戏界面的正确显示。
Java制作多种风格的窗口界面一例,虽然这种界面风格不是太漂亮,但展示了如何实现多风格窗口的变化,如果你的美工不错,可以设计出更漂亮... javax.swing.SwingUtilities.updateComponentTreeUI(this); //更新界面 }
SwingUtilities.updateComponentTreeUI(frame); com.qt.datapicker.DateTimePanel dateTimePanel = new com.qt.datapicker.DateTimePanel(true); frame.getContentPane().add(dateTimePanel); //dateTimePanel....
在main()方法中,通过SwingUtilities.invokeLater()方法启动主界面,确保界面在事件分派线程(Event Dispatch Thread)中创建和显示。 注意:此示例只是一个简单的演示,没有包括输入验证和错误处理等完整的功能。...
Substance (https://substance.dev.java.net)有很多的外观可以选择,而且都很漂亮,还提供了强大的API供开发者使用。 在设置外观时请把UIManager.set...SwingUtilities.invokeLater(new Runnable() {}的run方法中。
JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); java.awt.EventQueue.invokeLater(new Runnable() { ...SwingUtilities.updateComponentTreeUI(comm); }// end if
Substance (https://substance.dev.java.net)有很多的外观可以选择,而且都很漂亮,还提供了强大的API供...SwingUtilities.invokeLater(new Runnable() {}的run方法中。 这个上传错了,可是我不知道怎么删,唉。
SwingUtilities.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager. getSystemLookAndFeelClassName()); } catch (Exception exception) { exception....
import javax.swing.SwingUtilities; import javax.swing.UIManager; import com.mwq.frame.LandFrame; public class DrinkeryManage { public DrinkeryManage() { // Center the window Toolkit toolkit = ...
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 ...
" "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 集合中的一些方法,并包括其中的一些方法。 -------------------------------------------------- -----------...
画圆,画椭圆还是画矩形的方法,它们都有一个相同的方法名,但以不同的方式完成他们的 画圆的功能。 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主窗体类////////////////...