8.3 JWindow类

JWindow类与JFrame类类似。他使用JRootPane用于组件管理并且实现了RootPaneContainer接口。他是一个无装饰的顶层窗口。

8.3.1 创建JWindow

JWindow类有五个构造函数:

public JWindow()
JWindow window = new JWindow();
public JWindow(Frame owner)
JWindow window = new JWindow(aFrame);
public JWindow(GraphicsConfiguration config)
GraphicsConfiguration gc = ...;
JWindow window = new JWindow(gc);
public JWindow(Window owner)
JWindow window = new JWindow(anotherWindow);
public JWindow(Window owner, GraphicsConfiguration config)
GraphicsConfiguration gc = ...;
JWindow window = new JWindow(anotherWindow, gc);

我们可以不指定父类或是将父类指定为Frame或Window。如果没有指定父类,则会一个不可见的。

8.3.2 JWindow属性

表8-7列出了JWindow的六个属性。这些属性与JFrame属性类似,所不同的是JWindow没有用于默认关闭操作或是菜单栏的属性。

JWindow属性

属性名 数据类型

访问性

accessibleContext AccessibleContext

只读

contentPane Container

读写

glassPane Component

读写

layeredPane JLayeredPane

读写

layout LayoutManager

只写

rootPane JRootPane

只读

8.3.3 处理JWindow事件

JWindow类在JFrame以及Window类之外并没有添加额外的事件处理功能。查看本章前面的“处理JFrame事件”一节可以了解我们可以关联到JWidnow的监听器列表。

8.3.4 扩展JWindow

如果我们需要扩展JWindow,这个类具有两个重要的protected方法:

protected void windowInit()
protected JRootPane createRootPane()

8.4 JDialog类

JDialog类表示用于显示与Frame相关信息的标准弹出窗口。其作用类似于JFrame,其JRootPane包含一个内容面板以及一个可选的JMenuBar,而且他实现了RootPaneContainer与WidnowConstants接口。

8.4.1 创建JDialog

有11个构造函数可以用来创建JDialog窗口:

public JDialog()
JDialog dialog = new JDialog();public JDialog(Dialog owner)
JDialog dialog = new JDialog(anotherDialog);public JDialog(Dialog owner, boolean modal)
JDialog dialog = new JDialog(anotherDialog, true);public JDialog(Dialog owner, String title)
JDialog dialog = new JDialog(anotherDialog, "Hello");public JDialog(Dialog owner, String title, boolean modal)
JDialog dialog = new JDialog(anotherDialog, "Hello", true);public JDialog(Dialog owner, String title, boolean modal, GraphicsConfiguration gc)
GraphicsConfiguration gc = ...;
JDialog dialog = new JDialog(anotherDialog, "Hello", true, gc);public JDialog(Frame owner)
JDialog dialog = new JDialog(aFrame);public JDialog(Frame owner, String windowTitle)
JDialog dialog = new JDialog(aFrame, "Hello");public JDialog(Frame owner, boolean modal)
JDialog dialog = new JDialog(aFrame, false);public JDialog(Frame owner, String title, boolean modal)
JDialog dialog = new JDialog(aFrame, "Hello", true);public JDialog(Frame owner, String title, boolean modal, GraphicsConfiguration gc)
GraphicsConfiguration gc = ...;
JDialog dialog = new JDialog(aFrame, "Hello", true, gc);

注意,我们并不需要手动创建JDialog并进行装配,我们将会发现JOptionPane可以为我们自动创建并填充JDialog。我们将会在第9间探讨JOptionPane组件。

每一个构造函数都允许我们自定义对象拥有者,窗口标题以及弹出模式。当JDialog为模态时,他会阻止到其拥有者及程序其余部分的输入。当JDialog为非模态时,他会允许用户与JDialog以及程序的其余部分进行交互。

小心,为了使得对话框模式在不同的Java版本之间正常工作,我们要避免在JDialog中混合使用重量级的AWT组件以及轻量级的Swing组件。

8.4.2 JDialog属性

除了可以设置的图标,JDialog类具有与JFrame类相同的属性。表8-8中列出了这些八个属性。

JDialog属性

属性名 数据类型

访问性

accessibleContext AccessibleContext

只读

contentPane Container

读写

defaultCloseOperation int

读写

glassPane Component

读写

jMenuBar JMenuBar

读写

layeredPane JLayeredPane

读写

layout LayoutManager

只写

rootPane JRootPane

只读

用于指定所使用的默认关闭操作的常量是在前面的表8-6中所显示的WidnowConstants(除了EXIT_ON_CLOSE基本相同)。默认情况下,defaultCloseOperation属性设置为HIDE_ON_CLOSE,这是弹出对话框所要求的默认行为。

与JFrame类似,JDialog也有一个静态的defaultLookAndFeelDecorated属性。这可以控制默认情况下对话框是否由观感进行装饰。

8.4.3 处理JDialog事件

并没有需要我们特殊处理的JDialog事件;其事件处理与JFrame类相同。也许我们需要处理的一件与JDialog相关的事情就是指定当按下Escape按键时关闭对话框。处理这一事件的最简单的方法就是向对话框内的JRootPane里的键盘动作注册一个Escape按键,从而可以使得当按下Escape时JDialog变得不可见。列表8-4演示了这一行为。源码中的大部分重复了JDialog的构造函数。createRootPane()方法将Escape按键映射到自定义的Action。

package swingstudy.ch08;import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.event.ActionEvent;import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;public class EscapeDialog extends JDialog {public EscapeDialog() {this((Frame)null, false);}public EscapeDialog(Frame owner) {this(owner, false);}public EscapeDialog(Frame owner, boolean modal) {this(owner, null, modal);}public EscapeDialog(Frame owner, String title) {this(owner, title, false);}public EscapeDialog(Frame owner, String title, boolean modal) {super(owner, title, modal);}public EscapeDialog(Frame owner, String title, boolean modal, GraphicsConfiguration gc) {super(owner, title, modal, gc);}public EscapeDialog(Dialog owner) {this(owner, false);}public EscapeDialog(Dialog owner, boolean modal) {this(owner, null, modal);}public EscapeDialog(Dialog owner, String title) {this(owner, title, false);}public EscapeDialog(Dialog owner, String title, boolean modal) {super(owner, title, modal);}public EscapeDialog(Dialog owner, String title, boolean modal, GraphicsConfiguration gc) {super(owner, title, modal, gc);}protected JRootPane createRootPane() {JRootPane rootPane = new JRootPane();KeyStroke stroke = KeyStroke.getKeyStroke("ESCAPE");Action actionListener = new AbstractAction() {public void actionPerformed(ActionEvent event) {setVisible(false);}};InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);inputMap.put(stroke, "ESCAPE");rootPane.getActionMap().put("ESCAPE", actionListener);return rootPane;}}

注意,如果我们使用JOptionPane的静态创建方法,则其所创建的JDialog窗口会自动将Escape按键注册为关闭对话框。

8.4.4 扩展JDialog

如果我们需要扩展JDialog,该类具有两个重要的protected方法:

protected void dialogInit()
protected JRootPane createRootPane()

后面的方法在前面的列表8-4中进行了演示。

Root Pane Container(三)相关推荐

  1. linux su root 免密码,Ubuntu 18.04.2切换到root用户的三种方式及设置免密码操作

    本文介绍在Ubuntu 18.04.2系统中切换root用户的三种方式及在Ubuntu 18.04.2系统中设置普通用户切换root用户免密码操作. Ubuntu 18.04.2系统中切换root用户 ...

  2. linux中赋予普通用户root权限的三种方式

    前言 在成功拿下一个服务器并提权成为root用户以后,为了减少root用户使用时间从而减少被网站管理员发现的概率,就需要新建一个普通用户,并赋予其完全的管理员权限,有以下三种常见的方式 三种方式 1. ...

  3. Linux Container 研究报告

    1. 综述 lxc是Linux Container的用户态工具包.其代码由三部分组成: shell脚本,部分lxc命令是用shell脚本写就的. c语言代码,最终编译成可执行文件.这部分代码也用来提供 ...

  4. 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列

    前言 在前面 Yarn的基本架构和作业提交全流程 一文中提到,当ResourceManager收到客户端Client的请求之后会将该作业job添加到(默认的)容量调度器中,然后再由某一个空闲的Node ...

  5. 第三集 Spring for Apache Kafka 接受消息

    我们可以接受消息通过配置一个MessageListenerContainer 和提供一个消息监听或者通过使用@KafkaListener 注解 3.1 Message Listeners 当我们使用一 ...

  6. webAPP开发三:实现数据的交互显示

    开发中遇到的错误: 代码逻辑错误,将初始化函数放在了 初始化对象之前,造成了 ".html()"无法识别,表示未定义. http://read.t.imooc.io/    参考 ...

  7. Docker基础之容器(container)创建命令

    一.Docker基础之容器(container)创建命令的用法 docker container create --name myetcd etcd_cluster:gc4.0 create命令完成的 ...

  8. php mysql 修改密码_设置及修改MySQL root用户密码

    设置及修改MySQL root用户密码 MySQL数据库用户安全策略介绍 安装mysql数据库后,默认的管理员root密码是空,这很不安全,因此需要设置一个密码 为root设置密码 删除无用的MySQ ...

  9. linux——脚本的练习示例三

    一. [root@desktop27 mnt]# vim useradd_create.sh [root@desktop27 mnt]# cat useradd_create.sh #!/bin/ba ...

  10. Linux下修改root密码以及找回root密码的方法

    linux的root享有至高无上的权力,一旦root密码忘记或者被盗,是一件非常头痛的事情,那么怎么样才能找回root的密码呢,接下来为大家分享下Linux下修改root密码以及找回的方法 以root ...

最新文章

  1. make xconfig 报‘ptrdiff_t’ does not name a type错误解决方法
  2. char qt 转unicode_Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题...
  3. inventor如何钣金出弧面_Inventor教程之钣金多规则
  4. 【已解决】SyntaxError: Non-UTF-8 code starting with ‘\xe4‘ in file
  5. 【Linux】【secureCRT】下载,安装,激活攻略
  6. 记一下vue.js事件的修饰等问题
  7. 2017.10.26-构建之法:现代软件工程-阅读笔记
  8. MessageBox的用法
  9. 价格敏感度测试(PSM)模型及其在网游中的运用
  10. 计算机专业实践报告立题依据,开题报告立题依据 .doc
  11. linux安装i219网卡驱动下载,华硕E500 G5 (-INTEL I210 / I219-LM)网卡驱动12.17.10.7版下载,适用于Win10-64-驱动精灵...
  12. 组件、Prop属性的基本用法
  13. 【直观详解】线性代数的本质
  14. 用AnLink可以用鼠标同时操作电脑和手机
  15. TBM410-ASEMI的4A贴片整流桥TBM410
  16. 阿里云盘内测申请_阿里云网盘公测预约开始了,现在申请还送2个T的空间!
  17. java - day13 - UnionPay
  18. net start npf启用失败问题解决 net start npf 发生系统错误5、net start npf 服务名无效
  19. 5.参数估计——点估计与区间估计概念,置信区间的公式求法与Python实现求出结果
  20. Android软件工程师-面试题

热门文章

  1. paip.提升效率---模块化设计方法V2012.9.15
  2. PAIP.从DATATABLE动态生成表头
  3. Julia : 终于1.0了,这一天来得有点久
  4. (转)财新特稿丨风口浪尖上,李笑来谈ICO
  5. 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq
  6. CSDN创始人董事长蒋涛对话阿里云张献涛:距离云计算终极目标还有多远?
  7. 百亿独角兽爱学习教育集团:如何在半个月内搭建一套完整的课堂互动系统?...
  8. 【手势识别】基于matlab PCA+LDA手语检测识别【含Matlab源码 1551期】
  9. 【语音合成】基于matlab两端音频合成【含Matlab源码 1490期】
  10. java mongodb 读取文件_Java操作Mongodb之文件读写