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中进行了演示。
分享到:
相关推荐
分层介绍java Swing组件,详细说明rootPane,LayeredPane,rootPane,contentPane之间的关系
NavigationPane是软件开发中常见的一种界面元素,尤其在Windows应用和移动应用设计中,它扮演着导航和组织内容的关键角色。NavigationPane控件通常用于创建一个侧滑菜单,用户可以通过滑动屏幕或点击按钮来展示或...
【前端开源库-contacts-pane】是一个专为管理联系人而设计的开源项目,它提供了通讯簿、组和个人联系人的高效管理界面。这个库是前端开发中的一个重要工具,它旨在简化Web应用程序中的联系人数据处理,为用户提供...
它可能采用了WebRTC(Web Real-Time Communication)技术,这是一种允许网页浏览器进行实时通信的标准,支持音视频流的传输,无需插件或者第三方应用。通过WebRTC,meeting-pane可以在多种浏览器和操作系统上运行,...
"folder-pane"就是一个这样的开源库,专门用于实现文件夹窗格功能,为用户带来类似文件浏览器的交互体验。这个库尤其适用于需要处理大量文件数据、提供文件浏览和管理的Web应用。 首先,我们要理解什么是“文件夹...
"source-pane"是一个这样的库,专为前端开发者设计,它提供了源窗格的功能,允许用户查看和编辑代码实体,尤其适用于调试和增强开发体验。在这个“源窗格”中,我们可以看到它被设计成一个兼容各种实体的编辑器,...
总的来说,“Windows-7-Navigation-Pane-Customizer”是一款实用的第三方工具,它为Windows 7用户提供了一个调整和优化导航窗格的平台,从而提升操作效率和用户体验。通过合理利用这个工具,我们可以让Windows 7更加...
解决Vue对Element中的el-tab-pane添加@click事件无效
在使用"pane-fixer-centos"之前,你需要先下载项目中的脚本文件到本地,然后通过终端运行该脚本,赋予其执行权限(如`chmod +x pane-fixer-centos`),最后执行该脚本(如`./pane-fixer-centos`)。执行过程中,脚本...
Atom-嘿pane是一款专为Atom文本编辑器设计的插件,其主要功能是放大当前活动的窗格,提升用户在编程或文本编辑过程中的聚焦能力。Atom作为一个由GitHub开发的开源文本编辑器,利用Web技术如HTML、CSS和JavaScript...
Property name for specifying skin to be used on the specific root pane. This property can only be installed on a JRootPane and will affect all the controls in that root pane. The value must be an ...
DotnetBar 8.1.0.6教程-NavigationPane 从官方网站下载的教程,是用VB演示的如何使用DotnetBar的,是英文版的。 在C#中用起来一样,但愿对大家有用。
4pane_5.0.orig.tar.gz 4pane_5.0-2.debian.tar.xz 4pane_5.0-2.dsc 4pane_5.0-2_amd64.deb 4pane_5.0-2_i386.deb 4pane_5.0-2_arm64.deb 4pane_5.0-2_mips64el.deb 需要国产服务器操作系统或者服务器操作系统的...
标题中的"pane-management-源码.rar"表明这是一个关于“pane管理”的源代码压缩包,可能是某个软件或系统组件的一部分,用于处理用户界面中的pane布局和管理。然而,由于没有具体的标签来指明这是哪种编程语言或者...
**FilePane使用教程** FilePane是一款专为Mac OS平台设计的高效工具,它极大地简化了用户在处理文本和图片时的复制、粘贴操作。通过FilePane,你可以无需复杂的键盘快捷键,只需简单的拖放动作就能完成文件和信息的...
Chat-pane 是一个专为前端开发设计的开源库,主要用于构建聊天窗口功能。它提供了一种高效、可定制的方式来实现各种类型的聊天界面,如实时通信、客户服务对话框或社交媒体的私信功能。作为一个开源项目,Chat-pane ...
Vue多分割窗格 基于Vue.js的组件。 提供无限的可调整大小的多窗格支持。 演示版 | | | 安装 npm i vue-multi-split-pane ... onPaneCollapsed ( paneIndex , paneClass , containerClass ) { console . log
【标题】"Cupertino Pane Master源码解析" 在IT行业中,源码是理解软件工作原理的关键,特别是对于开发者而言,深入研究源码有助于提升技能和解决问题。本篇将详细探讨"cupertino-pane-master"项目,这是一个与iOS...
Vue分割窗格使用Vue.js的可调拆分窗格安装# yarn (recommend)$ yarn add vue-split-pane# npm$ npm install vue-split-pane --save用法CDN < script src =" https://unpkg.com/vue-split-pane " > </ ...
在本文中,我们将深入探讨如何解决Vue中`el-tab-pane`切换时遇到的问题,以及如何优化和管理组件的渲染。 首先,问题出现在当用户在不同数量的`el-tab-pane`之间切换时,`el-dialog`可能会保持之前的状态,这通常是...