关于JAVA8 Window类的使用方法

2018-11-01 05:19徐洪位
电脑知识与技术 2018年18期
关键词:图标列表调用

徐洪位

摘要:在进行JAVA程序设计时,窗口是常用的一个对象,窗口对象是没有边框和菜单栏的顶级窗口。窗口的默认布局是边界布局。一个窗口必须有一个框架、对话框或另一个定义为它的所有者的窗口。该文对Window类的使用和设置进行了简要的介绍。

关键词:Window;Illegal Argument Exception;Graphics Configuration

中图分類号:TP316 文献标识码:A 文章编号:1009-3044(2018)18-0069-02

1 概述

在多屏幕环境中,您可以通过使用窗口(窗口、GraphicsConfiguration)创建窗口,在不同的屏幕设备上创建一个窗口。GraphicsConfiguration对象是目标屏幕设备的GraphicsConfiguration对象之一。

在虚拟设备多屏幕环境中,桌面区域可以跨越多个物理屏幕设备,所有配置的边界都相对于虚拟设备坐标系统。虚拟坐标系统的原点位于主物理屏幕的左上角。根据虚拟设备中主屏幕的位置,可能会出现负坐标,如图1所示:

其中Virtual device:虚拟设备;physical screen:物理屏幕;primary physical screen:主物理屏幕。

2 使用方法简介

当在一个环境中调用setLocation方法时,必须将一个虚拟坐标传递给这个方法。类似地,在窗口中调用getLocationOnScreen将返回虚拟设备的坐标。调用GraphicsConfiguration的getBounds方法,在虚拟坐标系统中找到它的原点。

下面的代码将窗口的位置设置为(10,10)相对于相应图形配置的物理屏幕的原点。如果没有考虑到GraphicsConfiguration的边界,窗口位置将设置为(10,10)相对于虚拟坐标系统,并且会出现在主物理屏幕上,这可能与指定图形配置的物理屏幕不同。

Window w = new Window(Window owner, GraphicsConfiguration gc);

Rectangle bounds = gc.getBounds();

w.setLocation(10 + bounds.x, 10 + bounds.y);

注意:顶层窗口的位置和大小(包括窗口、框架和对话框)都在桌面窗口管理系统的控制之下。调用setLocation、setSize和setBounds是被转发到窗口管理系统的请求(而不是指令)。但是,在某些情况下,窗口管理系统可能会忽略这些请求,或者修改所请求的几何形状,以使窗口更接近于桌面设置。

由于事件处理的异步性质,getBounds、getLocation、getLocationOnScreen和getSize返回的结果可能无法反映屏幕上的窗口的实际几何形状,直到最后一个请求被处理。在处理后续请求的过程中,这些值可能会相应地发生变化,而窗口管理系统则满足这些请求。

一个应用程序可以任意设置一个看不见的窗口的大小和位置,但是窗口管理系统可能随后改变它的大小和/或窗口可见的位置。将生成一个或多个组件,以指示新的几何图形。

Windows能够生成下列窗口事件:窗口打开,窗口关闭,窗口集中,窗口集中。

3 构造器使用概述

3.1 Window

格式:public Window(Frame owner);

构造一个新的、最初看不见的窗口,其中指定的框架作为它的所有者。除非它本身在屏幕上显示,否则该窗口将不能被聚焦。

如果有一个安全管理器,它被调用时将来检查AWTPermission(“showwindowwithoutarningbanner”)。如果这个检查失败了,那么就会创建一个警告标志。

参数:如果窗口没有所有者,则该框架作为本身所有或null。

异常抛出:

IllegalArgumentException:如果所有者的GraphicsConfiguration不是来自屏幕设备;

HeadlessException:当GraphicsEnvironment.isHeadless返回true时产生异常。

3.2 Window

格式:public Window(Window owner)

构造一种新的、最初看不见的窗口,它的所有者是指定的窗口。除非它的最近的拥有框架或对话框显示在屏幕上,否则这个窗口将不会成为焦点。

使用方法与第一个构造器相同。

3.3 Window

格式:public Window(Window owner,GraphicsConfiguration gc)

构造一个新的,最初不见的窗口,有指定的所有者窗口和一个屏幕设备的图形配置。除非它最近的拥有框架或对话框显示在屏幕上,否则该窗口将无法集中。

如果有一个安全管理器设置,它将调用检查AWTPermission(“showwindowwithoutarningbanner”)。如果这个检查失败了,那么就会创建一个警告标志。

参数:

owner—如果此窗口没有所有者,则该窗口作为所有者或null。

gc-目标屏幕设备的图形配置;如果gc为空,则假定系统默认为GraphicsConfiguration。

异常抛出:

IllegalArgumentException:如果gc不是来自屏幕设备;

HeadlessException -当GraphicsEnvironment.isHeadless()返回true值。

4 主要方法使用说明

4.1 getIconImages

格式:public List getIconImages()

返回要显示为这个窗口的图标的图像序列。

该方法返回一个内部存储列表的副本,因此返回的对象上的所有操作都不会影响窗口的行为。

返回值:如果该窗口没有图标图像,则为该窗口的图标图像的副本或空列表。

4.2 setIconImages

格式:public void setIconImages(List<? extends Image> icons)

设置要显示为该窗口的图标的图像序列。随后对getIconImages的调用将总是返回一个图标列表的副本。

根据平台功能,不同维度的一个或多个图像将被用作窗口的图标。从一开始,这些图标就会被扫描到最合适的尺寸。如果列表包含相同大小的多个图像,则将使用第一个。无主窗口,没有指定的图标使用平台默认图标。所有者窗口的图标可以从所有者继承,除非显式地重写。將图标设置为null或空列表将恢复默认行为。

注意:本机窗口系统可以根据上下文(例如窗口装饰、窗口列表、任务栏等)使用不同维度的不同图像来表示窗口。它们也可以只对所有上下文使用单个图像,或者根本不使用图像。

参数:icons-显示的图标图像列表。

4.3 setIconImage

格式:public void setIconImage(Image image)

设置要显示为该窗口的图标的图像。这个方法可以代替setIconImages()来指定单个图像作为窗口的图标。

语句:setIconImage(image) 等价于:

ArrayList imageList = new ArrayList();

imageList.add(image);

setIconImages(imageList);

注意:本机窗口系统可以根据上下文(例如窗口装饰、窗口列表、任务栏等)使用不同维度的不同图像来表示窗口。它们也可以只对所有上下文使用单个图像,或者根本不使用图像。

参数: image -要显示的图标图像。

4.4 addNotify

格式:public void addNotify()

通过创建与本机屏幕资源的连接,使此窗口可显示。这个方法是由工具箱内部调用的,不应该被程序直接调用。

4.5 removeNotify

格式:public void removeNotify()

通过删除与本机屏幕资源的连接,使此容器无法显示。使一个容器无法显示,将使所有的孩子都无法显示。这个方法是由内部工具箱调用的,不应该被程序直接调用。

4.6 toBack

格式:public void toBack()

如果这个窗口是可见的,将这个窗口发送到后面,如果它是焦点或活动窗口,可能会导致它失去焦点或激活。

将此窗口放置在堆栈顺序的底部,并在此VM的任何其他窗口后面显示它。这个窗口是不可见的。有些平台不允许其他窗口拥有的窗口出现在其所有者的下方。每一次尝试都将使这扇窗户尽可能的低,在堆叠顺序;但是,开发人员不应该假设这种方法会在任何情况下将这个窗口移到所有其他窗口之下。

由于本地窗口系统的变化,无法保证对焦点和活动窗口的更改。开发人员永远不能假定这个窗口不再是焦点或活动窗口,直到这个窗口接收到WINDOW_LOST_FOCUS或window_deactive事件。在最顶部的窗口是焦点窗口的平台上,这个方法可能会导致这个窗口失去焦点。在这种情况下,这个VM中的下一个最高的、可聚焦的窗口将得到焦点。在堆叠顺序通常不会影响焦点窗口的平台上,这种方法可能会使焦点和活动窗口保持不变。

参考文献:

[1] 战晓苏, 江凌. Java 8编程参考官方教程[M]. 9版. 北京: 清华大学出版社, 2015.

[2] 陆明刚, 劳佳. Java 8实战[M]. 北京: 人民邮电出版社, 2016.

[3] 刘利明, 张莉萍. JavaWeb开发实战1200例[M]. 北京: 清华大学出版社, 2011.

猜你喜欢
图标列表调用
学习运用列表法
核电项目物项调用管理的应用研究
Android手机上那些好看的第三方图标包
LabWindows/CVI下基于ActiveX技术的Excel调用
基于系统调用的恶意软件检测技术研究
有意思的厕所图标
不含3-圈的1-平面图的列表边染色与列表全染色
利用RFC技术实现SAP系统接口通信