形象解释Swing中顶级容器和中间容器中各个类的意思(最好有实例图片)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了形象解释Swing中顶级容器和中间容器中各个类的意思(最好有实例图片)相关的知识,希望对你有一定的参考价值。

所谓顶级容器就是提供提供的那个边框,你视觉效果是是这样,但是这个玩意是可有可无,你可以不用他们。JRootPane是所有所谓重量级控件的的容器,该轻量级容器由 JFrame、JDialog、JWindow、JApplet 和 JInternalFrame 在后台使用。
swing容器是在awt的组件上扩展而来

java.awt.Container
javax.swing.JComponent
一旦进入swing的世界就完全颠覆了顶级容器和中间容器,所有的组件都是可以随意搭配,是完全开放的组合方式,你想在JTextField里加个按钮没问题,你想在按钮里加别的东西也没问题,当然那些 JFrame、JDialog、JWindow、JApplet 除外,这些顶层容器必须要使用getContentPane()方法才能将这个窗体的内容加入到另一个任何swing控件里去。panel.add(frame.getContentPane()),这样的方式你就可以把重量级控件的内容加入到一个自己的容器里去。当你你可以直接加,但是不建议,这样的后果不确定。

swing的结构适合自由人士,限制很小,你可以发挥创造力,他的UI实现完全是在自己的隔离空间内完成,如果你乐意你甚至可以自己去完全Java2D画一个全新的控件,而这个控件将会和所有的标准控件完全兼容。能够做到这一点是建立在swing最纯的mvc结构之上的,而其他如swt就没有这种能力,当代价就是你要熟悉swing这一套体系。

至于速度上,swing早晚会超过的swt之类,最少不会比他们差,就目前来看,swing在window上的速度随着jdk的更新,已经可以赶上swt的速度了,而在其他平台,swing超越了swt.
就像有这样的一句话,swing是火车,swt是马,当最古老的蒸汽火车喘着粗气慢吞吞的移动,而马却眨眼就超过火车了,但是100年过去了,火车的速度会轻松的甩掉马。 swing的完全的独立性会使得他可以有无穷的优化空间,但是swt这种和系统有关联的特性一方面使得他在mvc上必须要遵照改系统平台的要求,同时他无法在界面上做出优化,那些由系统完成的UI功能他无法控制,也就是说如果操作系统在UI上很强,他就很强,如果操作系统很弱,他就弱。但是swing则没有这种限制。
参考技术A 什么是中间容器啊...没听说过啊,所谓的顶层容器就是从操作系统给的窗口:frame,window,jFrame,JWindow,然后java里面还有一个轻量级(Lightweight)和重量级(heavyweight)组件的说法,重量级指的是awt,也是操作系统已经有的组件如button;checkBox
java就是拿过来改成自己的语法,而轻量级组件一般指的就是swing,就是在awt的基础上然后用纯java语言(pur java)自己画的,就是从awt的container上面继承了一个JComponent,然后用java2d自己画,这样平台无关,所有的操作系统的swing组件都是一个样,但是awt组件却是各个操作系统都不同

但是重量级未必就重,轻量级未必就轻,swing要占用更多的内存,更多的加载时间,而awt因为是调用的操作系统已有的组件,所以更快,但是swing更灵活,更模块化,而且支持皮肤

GUI编程----- 容器组件

JFrame 框架窗体

JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以讲JFrame看作是承载这些Swing组件的容器。JFrame窗体具有最大化、最小化和关闭按钮。

常用方法

1、构造方法

JFrame() 构造一个初始时不可见的新窗体。

JFrame(String title) 创建一个新的、初始不可见的、具有指定标题的 Frame

注意:构造方法创建出来的窗体式默认隐藏的。

2、普通方法

Container getContentPane() 返回此窗体的 contentPane 对象。Component类的。

public void setVisible(boolean b) 设置窗体的隐藏和显示。window类的。

public void setSize(int width, int height) 调整组件的大小,使其宽度为 width,高度为 height

void setBounds(int x, int y, int width, int height) 移动组件并调整其大小。

void setIconImage(Image image)  设置要作为此窗口图标显示的图像。

Component add(Component comp) 将指定组件追加到此容器的尾部。

void setDefaultCloseOperation(int operation) 设置用户在此窗体上发起 "close" 时默认执行的操作。

operation的值:

DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的 WindowListener 对象的 windowClosing 方法中处理该操作。
HIDE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册的 WindowListener 对象后自动隐藏该窗体。
DISPOSE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体。
EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit 方法退出应用程序。仅在应用程序中使用。
默认情况下,该值被设置为 HIDE_ON_CLOSE。更改此属性的值将导致激发属性更改事件,其属性名称为 "defaultCloseOperation"。

代码示例:

 1 public static void main(String[] args) {
 2         JFrame frame = new JFrame("测试窗体"); //创建带有标题的窗体
 3         frame.setSize(300, 300); //设置大小
 4         frame.setLocationRelativeTo(null); //居中显示
 5         frame.setIconImage(Toolkit.getDefaultToolkit().createImage("E:\\\\Workspace\\\\Demo\\\\src\\\\IMG_1880.PNG"));
 6         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击x好的时候退出虚拟机
 7         JButton button = new JButton("我是一个button");
 8         frame.add(button); //添加组件
 9 //        Container container = frame.getContentPane();
10 //        container.add(button);
11         frame.setVisible(true); //设置显示
12     }
View Code

JDialog对话框

代码示例如下:

 1 public static void main(String[] args) {
 2         JFrame frame = new JFrame("测试窗体"); //创建带有标题的窗体
 3         frame.setSize(300, 300); //设置大小
 4         frame.setLocationRelativeTo(null); //居中显示
 5         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 6         
 7         JDialog dialog = new JDialog(frame,"对话框");
 8         dialog.setBounds(300, 300, 100, 100);
 9         dialog.setLocationRelativeTo(frame);
10         dialog.setVisible(true);
11         dialog.add(new JLabel("我是一个对话框"));
12         frame.setVisible(true);
13 }
View Code

JDialog使用起来不方便,不能明确的起到作用。所以用JOptionPane来代替。

JOptionPane使用方法代码如下:

 1 public class DemoDialog {
 2     public static void main(String[] args) {
 3         JFrame frame = new JFrame("测试窗体"); //创建带有标题的窗体
 4         frame.setSize(300, 300); //设置大小
 5         frame.setLocationRelativeTo(null); //居中显示
 6         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 7         
 8         
 9         //消息对话框
10         JOptionPane.showMessageDialog(frame, "通知内容", "通知",JOptionPane.INFORMATION_MESSAGE);
11         //警告对话框
12         JOptionPane.showMessageDialog(frame,"警告内容","警告",JOptionPane.WARNING_MESSAGE);
13         //错误对话框
14         JOptionPane.showMessageDialog(frame,"错误内容","错误",JOptionPane.ERROR_MESSAGE);
15                 
16         //输入框
17         String moeny = JOptionPane.showInputDialog("请输入你要给我的金额($)");
18         System.out.println("money:"+ moeny);
19                 
20         //确认框
21         int num = JOptionPane.showConfirmDialog(frame, "你确认要卸载吗?");
22         System.out.println(num);
23     }
View Code

FileDialog文件对话框

代码示例:

 1 public class Demo3 {
 2 
 3     public static void main(String[] args) {
 4         JFrame frame = new JFrame("窗体");
 5         //创建一个文件对话框(初始也是不可见)
 6         //FileDialog fileDialog = new FileDialog(frame, "请选择打开的文件", FileDialog.LOAD);
 7         FileDialog fileDialog = new FileDialog(frame,"请选择保存的路径",FileDialog.SAVE);
 8         FrameUtil.initFrame(frame, 300,400);
 9         fileDialog.setVisible(true);
10         System.out.println("文件所在的目录:"+ fileDialog.getDirectory());
11         System.out.println("文件名:"+ fileDialog.getFile());
12     }
13 }
View Code

JPanel 面板

代码示例:

 1 public class Demo4 {
 2     
 3     public static void main(String[] args) {
 4         JFrame frame = new JFrame("窗体");
 5         //创建一个面板
 6         JPanel panel = new JPanel();
 7         //设置面板的背景颜色
 8         panel.setBackground(Color.RED);
 9         //把面板添加到窗体
10         frame.add(panel);
11         FrameUtil.initFrame(frame, 400, 300);
12     }
13 }
View Code

JScorollPane面板

JScorllPane面板是带滚动条的面板,它也是一种容器。但是JScorllPane只能放置一个组件,并且不可以使用布局管理器。如果需要在JScorllPane面板中放置多个组件,需要将多个组件放置在Jpanel面板上,然后将Jpanel面板作为一个整体组件添加在JScorllPane面板上。

代码示例如下:

 1 public static void main(String[] args) {
 2         JFrame frame = new JFrame("测试窗体"); //创建带有标题的窗体
 3         frame.setSize(300, 100); //设置大小
 4         frame.setLocationRelativeTo(null); //居中显示
 5         frame.setIconImage(Toolkit.getDefaultToolkit().createImage("E:\\\\Workspace\\\\Demo\\\\src\\\\IMG_1880.PNG"));
 6         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击x好的时候退出虚拟机
 7         JLabel label = new JLabel("这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label这是一个滚动Label");
 8         JScrollPane scrollPane = new JScrollPane(label);
 9         frame.add(scrollPane);
10         frame.setVisible(true); //设置显示
11     }
View Code

 

以上是关于形象解释Swing中顶级容器和中间容器中各个类的意思(最好有实例图片)的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记7.1.1 初探Swing世界 - Swing顶级容器

Java学习笔记7.1.1 初探Swing世界 - Swing顶级容器

关于Swing中JFrame等顶级容器的层次还有设置背景的方式

JPanel与JFrame有啥关系 与不同的

关于 Java Swing 中组件类的继承层次结构的说明?

swing类的类名都以大写字母啥开头