GUI
GUI全称是Graphical User Interface,及图形化用户界面。GUI可以让用户直接操作的图形化界面,包括窗口、菜单、按钮、工具栏和其他各种图形化界面元素。
Java针对GUI设计提供了丰富的类库,这些类库分别位于java.awt和java.swing包中,简称AWT和Swing。
AWT引入了大量的Windows函数,因此称为中重量级组件。
Swing是以AWT为基础构建的轻量级图形界面组件。
1. Swing概述
Swing是Java的图形用户界面(GUI)工具包,旨在提供丰富且可定制的界面组件,用于开发跨平台的桌面应用程序。它以抽象的窗口工具包(AWT)为基础,使跨平台应用程序可以使用可拔插的外观风格。
它是Java Foundation Classes(JFC)的一部分,设计用于替代早期的Abstract Window Toolkit(AWT)。
1.1 功能及特点
关于Swing的主要特点和概述:
-
跨平台性:Swing是基于Java的,因此可以实现跨平台的能力。这意味着您可以编写一次代码,并在Windows、Mac和Linux等操作系统上运行,而无需对源代码进行修改。
-
丰富的UI组件:Swing提供了大量的可定制的用户界面组件,如按钮、标签、下拉框、文本框、表格等。这些组件可以轻松地进行布局和样式的修改,以满足应用程序的特定需求。
-
可扩展性:Swing具有强大的扩展性,允许开发人员根据自己的需求创建自定义组件或修改现有的组件。使用Swing,您可以根据应用程序的要求创建独特的用户界面元素。
-
MVC架构:Swing采用了Model-View-Controller(MVC)架构模式,该模式将应用程序的数据逻辑、用户界面和用户输入分离开来,以便更好地管理和维护代码。
-
支持轻量级绘图:与AWT相比,Swing使用了一种轻量级的绘图模型,这使得它能够提供更快的响应时间和更好的性能。
1.2 Swing组件
在java中所有的Swing组件都保存在javax.swing包中。
Swing组件的所有类都继承Container类,然后根据GUI的功能扩展了两个主要分支,分别是容器分支和组件分支。
容器分支是为了实现图形化用户界面窗口的容器而设计的,而组件分支则是为了实现向容器中填充数据、元素和交互组件等功能。
-
Container(容器):Container是一个抽象类,是Swing组件的父类。它表示一个包含其他组件的容器,用于存放和布局其他组件。Container提供添加和移除组件的方法,并通过布局管理器来确定组件的位置和大小。
-
Window(窗口):Window是一个抽象类,表示一个顶级窗口。它是所有窗口类的父类,包括JFrame、JDialog等。Window提供基本的窗口操作,如显示、隐藏、调整大小等。
-
JWindow:JWindow是继承自Window的Swing组件,它表示一个无边框的窗口。JWindow通常用于创建自定义的弹出窗口或者非模态的辅助窗口。
-
Frame(框架):Frame是继承自Window的Swing组件,它表示一个具有标题栏、边框和可调整大小的窗口。Frame通常用作应用程序的主窗口。
-
JFrame(窗体):JFrame是Swing应用程序中最基本的顶级窗口容器。它具有标题栏、边框和可调整大小的能力。
-
Dialog(对话框):Dialog是继承自Window的Swing组件,它表示一个模态对话框。Dialog通常用于获取用户输入或显示信息,并阻塞用户对其他窗口的操作。
-
JDialog:JDialog是基于Window的对话框类,用于创建模态或非模态的对话框窗口。它通常用于获取用户输入、显示信息或执行特定操作。
-
JComponent:JComponent是一个抽象类,是所有Swing组件的超类。它扩展自AWT的Component类,并提供了更多的扩展功能,如双缓冲、透明度控制等。
-
JPanel(面板):JPanel是一个轻量级容器,可用于组织和布局其他组件。它通常被用作JFrame的内容面板。
-
JDialog:JDialog是基于Window的对话框类,用于创建模态或非模态的对话框窗口。它通常用于获取用户输入、显示信息或执行特定操作。
-
JScrollPane(滚动面板):JScrollPane可以将任何其他组件(如文本框、列表)包装在一个可滚动的容器中,使得内容超出可视区域时可以滚动查看。
-
JMenuBar(菜单栏):JMenuBar是一个用于显示菜单的容器组件。它通常位于窗口的顶部,包含多个JMenu组件。
-
AbstractButton(抽象按钮):AbstractButton是一个抽象类,是所有按钮组件(如JButton、JCheckbox等)的父类。它提供了按钮的基本功能,如文本、图标、事件处理等。
-
JButton(按钮):JButton是一个可点击的按钮,用于触发事件。它可以显示文本、图标或两者结合。
-
JMenuItem(菜单项):JMenuItem是一个标准菜单中的一个选项。它可以被点击,并触发关联的动作。JMenuItem通常被放置在JMenu或JPopupMenu中。
-
JMenu(菜单):JMenu是一个用于显示菜单项的容器组件。它可以包含多个JMenuItem或JMenu,形成一个多级菜单。
-
JToggleButton(切换按钮):JToggleButton是一个可以切换状态的按钮。它可以表示两种状态(选中和未选中),并触发相关的动作。
-
JCheckBox(复选框):JCheckBox用于提供多个选项,用户可以从中可选或取消选项。它可以单独使用,也可以作为组件的一部分。
-
JRadioButton(单选按钮):JRadioButton用于提供一组互斥的选项,用户只能选择其中一个选项。
-
JComboBox(下拉列表框):JComboBox是一个组合框,可以用于在一个下拉列表中选择一个选项。用户可以点击下拉按钮展开选项列表。
-
JTextComponent:是用于编辑和显示文本内容的Swing组件的父类。JTextComponent可以用于单行或多行的文本输入和显示。
-
JTextField(文本框):JTextField是一个用于输入和显示单行文本的组件。它允许用户在文本框中输入文字,并可以通过编程方式获取输入的内容。
-
JTextArea(文本域):JTextArea是一个多行文本输入框,用于输入和显示大段的文本信息。
-
JPopupMenu(弹出菜单):JPopupMenu表示一个弹出式菜单,可在用户请求时显示。它通常用于响应鼠标右键点击,并提供上下文相关的操作选项。
-
JLabel(标签):JLabel用于显示文本或图像。通常用于GUI中提供说明、标题或其他需要展示静态文本的地方。
-
JTable(表格):JTable是一个用于显示和编辑表格数据的组件。它可以包含多列和多行的数据,并提供了丰富的功能来管理表格数据的展示和编辑。
-
JPasswordField(密码框):JPasswordField是一个用于输入密码的文本框。输入的文本内容会被隐藏,只显示一些特定字符(如星号)。
-
JList(列表):JList用于显示一个可选择的单元或一组单元的列表。用户可以从列表中选择一个或多个项目。
2.swing顶级容器
当涉及到Swing的主要顶级容器时,通常会提到三个容器,它们是JFrame、JDialog和JWindow。这些容器提供了不同的功能和特性,以满足不同类型的应用程序需求。
-
JFrame
JFrame是Swing的主要顶级容器,它代表了一个标准的窗口。
JFrame提供了基本的窗口功能,例如标题栏、最大化、最小化和关闭按钮等。它可以包含其他Swing组件,例如按钮、文本框和标签等。通常情况下,JFrame被用作应用程序的主窗口。
-
JDialog
JDialog是一个对话框顶级容器,用于显示模态或非模态对话框。
模态对话框是一个阻塞用户交互的窗口,直到用户完成对话框的操作,而非模态对话框则允许用户在对话框打开的同时进行其他操作。JDialog通常用于显示一些临时性的窗口,例如警告、确认框或消息框等。
-
JWindow
JWindow是无边框的顶级窗口容器。
它没有标题栏和边框,通常被用作自定义窗口的基础。JWindow可以用于创建特殊的窗口布局和样式,比如不需要标题栏和边框的弹出图形或动画窗口。
2.1 JFrame
JFrame是Swing中最常用的顶级容器之一,用于创建和管理可调整大小的窗口。它是一个独立存在的顶级容器(窗口),不能放置在其他容器里。
2.1.1 构造方法
以下是JFrame的构造方法以表格形式列出,并提供详细的举例说明:
构造方法 | 描述 | 举例 |
---|---|---|
JFrame() | 创建一个无标题的空白窗口。 | JFrame frame = new JFrame(); |
JFrame(String title) | 创建一个具有指定标题的窗口。 | JFrame frame = new JFrame(“My Window”); |
JFrame(String title, GraphicsConfiguration gc) | 创建一个具有指定标题和GraphicsConfiguration对象的窗口。 | GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); JFrame frame = new JFrame(“My Window”, gc); |
JFrame(GraphicsConfiguration gc) | 创建一个具有指定GraphicsConfiguration对象的无标题窗口。 | GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); JFrame frame = new JFrame(gc); |
JFrame(Rectangle bounds) | 创建具有指定边界的无标题窗口。 | JFrame frame = new JFrame(new Rectangle(50, 50, 400, 300)); |
JFrame(String title, Rectangle bounds) | 创建具有指定标题和边界的窗口。 | JFrame frame = new JFrame(“My Window”, new Rectangle(50, 50, 400, 300)); |
JFrame(Frame owner) | 创建一个具有指定拥有者的无标题窗口。 | Frame owner = new Frame(); JFrame frame = new JFrame(owner); |
JFrame(String title, Frame owner) | 创建一个具有指定标题和拥有者的窗口。 | Frame owner = new Frame(); JFrame frame = new JFrame(“My Window”, owner); |
JFrame(String title, Frame owner, GraphicsConfiguration gc) | 创建具有指定标题、拥有者和GraphicsConfiguration对象的窗口。 | Frame owner = new Frame(); GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); JFrame frame = new JFrame(“My Window”, owner, gc); |
JFrame(Frame owner, GraphicsConfiguration gc) | 创建具有指定拥有者和GraphicsConfiguration对象的无标题窗口。 | Frame owner = new Frame(); GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); JFrame frame = new JFrame(owner, gc); |
2.1.2 常用方法
好的,下面是一张表格,其中列出了 JFrame 类的常用方法及其详细举例:
方法 | 描述 | 举例 |
---|---|---|
JFrame() |
创建一个无标题的、不可调整大小的 JFrame 窗口 | JFrame frame = new JFrame(); |
JFrame(String title) |
创建一个具有指定标题的、不可调整大小的 JFrame 窗口 | JFrame frame = new JFrame("My Window"); |
setTitle(String title) |
设置 JFrame 窗口的标题 | frame.setTitle("New Title"); |
setDefaultCloseOperation(i |