Swing:使用顶层容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:
Swing提供3种顶层容器类:JFrame,JDialog,JApplet。当使用这三个类时,你必须注意以下几点:
 
1.为了显示在屏幕上,每个GUI组件必须是包含层次(containment hierarchy的一部分。包含层次是组件的一个树型结构,最顶层的容器是它的根。  

2.每个
GUI组件只能被包含一次。如果一个组件已经在一个容器中,这时试图将它加入到一个新的容器,则这个组件会从第一个容器移除,并加入到第二个容器中。
 

3.每个顶层容器都有一个内容面板
(content pane),一般情况下,这个内容面板会包含(直接或间接地)所有顶层容器GUI的可视组件。
 

4.可以在顶层容器中加入一个菜单条
(menu bar)。通常这个菜单条被放置在顶层容器中,但在内容面板外。

下面这张图片是通过应用程序创建的一个frame。这个frame包含一个绿色的菜单(空菜单),在这个frame的内容面板上有一个巨大的黄色空标签。

 
这个例子的源代码见TopLevelDemo.java。下图是这个例子GUI的包含层次。

1.顶层容器与包含层次
每个使用Swing组件的程序都至少有一个顶层容器。这个顶层容器是包含层次的根节点—这个层次会包含所有将在这个顶层容器中出现的Swing组件。
    通常情况下,一个单独的基于
Swing GUI的应用程序至少有一个包含层次,且它的根节点是JFrame。举例来说,如果一个应用程序拥有一个窗口和两个对话框,那么这个应用程序将会有三个包含层次,也即会有三个顶层容器。一个包含层次将JFrame作为它的根节点,两外两个包含层次各有一个JDialog作为它的根节点。
一个基于Swing组件的小程序(applet)至少含有一个包含层次,并且可以确定其中必有一个是以JApplet作为其根节点的。例如,一个小程序带有一个对话框,则它会有两个包含层次。在浏览器窗口中的组件将会置于一个包含层次,它的根节点是一个JApplet对象。对话框会有一个包含层次,它的根节点是一个JDialog对象。
 
2.将组件加入到内容面板中
下面的代码操作是上面的例子中得到frame的内容面板并加入黄色标签:
frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
 
如代码所示,必须先找到顶层容器的内容面板,通过方法getContentPane实现。默认的内容面板是一个简单的中间容器,它继承自JComponent,使用一个BorderLayout作为它的面板管理器。
定制一个内容面板很简单—设置面板管理器或添加边框。这里必须注意,getContentPane方法将返回一个Container对象,而不是JComponent对象。这意味着如果需要利用JComponent的部分功能,还必须将返回值进行类型转换或创建你自己的组件来作为内容面板。我们的实例通常采用的是第二种方式因为第二种方法比较清楚明朗。 另一种我们有时会使用的方法就是简单地将一个自己定义组件添加进内容面板完全遮盖住内容面板。
如果你创建你自己的内容面板那么请注意确认它是不透明的一个不透明的JPanel将是一个不错的选择注意默认情况下JPanel的布局管理为FlowLayout, 你或许会想要用其它的布局管理器替换它。
为了使一个组件成为内容面板你需要使用顶层容器的setContentPane方法例如:
//Create a panel and add components to it.
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(someBorder);
contentPane.add(someComponent, BorderLayout.CENTER);
contentPane.add(anotherComponent, BorderLayout.PAGE_END);
//Make it the content pane.
//contentPane.setOpaque(true);
topLevelContainer
.setContentPane(contentPane);
  

注意不要使用透明的容器作为内容面板JScrollPane, JSplitPaneJTabbedPane. . 一个透明的内容面板将导致组件混乱尽管你可以使任何的透明的Swing组件通过setOpaque(true)方法来使其不透明化但当一些组件被设置成完全不透明后看上去会不太对劲例如一个标签面板.

 
3.添加一个菜单栏 (Adding a Menu Bar)
从理论上来讲每一个顶层容器都可以有一个菜单栏但事实表明菜单栏仅出现于Frame或者Applet为达到添加一个菜单栏到顶层容器你需要创建一个JMenuBar对象组装上一些菜单然后呼叫setJMenuBar方法. TopLevelDemo实例通过以下代码添加一个菜单栏到它的Frame.
frame.setJMenuBar(cyanMenuBar);
 
4.根容器 (The Root Pane)
每个顶层容器都依赖于一个隐式的称为根容器的中间容器这个根容器管理着内容面板和菜单栏并且连同两个或者两个以上的其它容器(见图中Layered Pane等)你通常不需要了解关于使用Swing组件根容器方面的知识.  然而如果你想截获鼠标的点击或者在多重组件上进行绘画动作那么你需要知晓根容器.
下图所示由顶层容器某个Frame(也可以是其它任何顶层容器)容器中可能出现的所有中间容器:

上文已经讲述了关于内容面板与可选的菜单栏的内容,此处不再复述. 根容器中包含的另外两个组件是布局面板和玻璃面板布局面板直接包含菜单栏和内容面板并且允许你对所添加的其它组件进行Z坐标排序玻璃面板通常用来截获发生在顶层中的输入动作并且同样可以用来在多重组件上进行绘画.


本文转自zhangjunhd51CTO博客,原文链接:http://blog.51cto.com/zhangjunhd/35200,如需转载请自行联系原作者
相关文章
|
8月前
|
Java API 容器
java的图形化界面编程AWT与Swing学习记录与分享(其一container容器)
java的图形化界面编程AWT与Swing学习记录与分享(其一container容器)
123 0
|
前端开发 Java 图形学
《Java 2 图形设计卷Ⅱ- SWING》第12章 轻量容器
第12章 轻量容器   本章讨论如下Swing轻量容器:  ·JPanel  ·JRootPane  ·JLayeredPane  ·JTabbedPane  ·JSplitPane  JPanel是AWT的Canvas和Panel类的继承类。
1511 0
|
28天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
200 77
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
9天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
15天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
84 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
21天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
45 3
实战~如何组织一个多容器项目docker-compose
|
30天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
96 3
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
69 12