Swing结构与布局管理详解

5星 · 超过95%的资源 需积分: 9 7 下载量 124 浏览量 更新于2024-08-01 收藏 328KB PPT 举报
"Swing结构与布局管理器.ppt - 中关村国际软件人才教育联盟,第十二讲,讲解Swing的结构、布局管理器及GUI组件的使用" Swing是Java 1.2版本中引入的一个图形用户界面(GUI)组件库,它属于Java Foundation Classes (JFC)的一部分。Swing类主要位于`javax.swing`包及其子包中,虽然它独立于早期的Abstract Window Toolkit (AWT),但两者并存,Swing提供了更为丰富的组件和更美观的外观。Swing组件通常以字母`J`开头,例如`JFrame`、`JPanel`等。 在Swing的组件体系结构中,继承关系如下: - `Object`:所有Java对象的基类。 - `Component`:表示GUI的基本元素,如按钮、文本框等。 - `Container`:是包含其他组件的组件,也就是容器。 - `Window`:是顶级容器,包括`Frame`和`Dialog`。 - `JFrame`:是主窗口类,用于创建应用程序的主要窗口。 - `JDialog`:用于创建对话框,可以是非模态或模态的。 - `JTextComponent`:是所有文本组件(如`JTextArea`, `JTextField`)的基类。 - `JComboBox`:下拉选择框。 - `JLabel`:用于显示文本或图像。 - `JList`:显示一个可选择的项目列表。 - `JMenuBar`:创建菜单栏。 - `JOptionPane`:提供简单对话框。 - `JPanel`:基本的容器,通常用作其他组件的容器。 - `JScrollBar`:滚动条组件。 - `AbstractButton`:所有按钮类(`JButton`, `JCheckBox`, `JRadioButton`)的基类。 - `JToggleButton`:切换按钮,可以是单选或多选。 - `JMenuItem`:菜单项。 - `JMenu`:创建菜单。 Swing中的容器主要有两类:轻量级容器(如`JPanel`)和重量级容器(如`JFrame`)。轻量级容器基于Java本身实现,性能较好,而重量级容器则依赖于操作系统提供的窗口系统。容器使用布局管理器来自动排列和调整其包含的组件,使得用户界面在不同屏幕分辨率和操作系统上都能自适应。 Swing提供了一些常见的布局管理器,如: 1. `FlowLayout`:按行从左到右、从上到下放置组件。 2. `BorderLayout`:将组件分为东、西、南、北、中五个区域。 3. `GridLayout`:按网格布局,所有组件占据相同大小的空间。 4. `BoxLayout`:沿X轴或Y轴将组件线性排列。 5. `GridBagLayout`:最灵活的布局管理器,允许组件在网格中占据不规则的空间。 掌握Swing的布局管理器对于创建复杂且自适应的用户界面至关重要。每个布局管理器都有其特定的用法和特点,开发者可以根据需求选择合适的布局管理器来组织组件。 通过学习Swing的结构、容器和布局管理器,开发者可以创建出功能强大且用户友好的Java桌面应用。Swing不仅提供了丰富的组件,还支持事件处理、国际化和可定制外观(Look and Feel),使其成为开发Java GUI应用的强大工具。

//图形用户界面 package tuxingyonhujiemian; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class Txyhjm { public static void main(String[] args) { // TODO Auto-generated method stub new MyFrame("aa"); } } class MyFrame extends JFrame{ public MyFrame() { setTitle("no title"); init(); } public MyFrame(String s) { setTitle(s); init(); } public void init() { MyMenuBar menubar = new MyMenuBar(); MyPanel panel = new MyPanel(); //界面布局 setLayout(new FlowLayout()); setJMenuBar(menubar); add(menubar); menubar.init(); add(panel); panel.init(); //是否可视 setVisible(true); //设置大小 setSize(400, 300); //设置点×号关闭即关闭程序 setDefaultCloseOperation(EXIT_ON_CLOSE); } } class MyMenuBar extends JMenuBar{ JMenuBar menubar = new JMenuBar(); JMenu menu1 = new JMenu("文件"); JMenu menu2 = new JMenu("文件"); JMenu menu3 = new JMenu("文件"); JMenu menu4 = new JMenu("文件"); JMenuItem menuitem1 = new JMenuItem("word"); JMenuItem menuitem2 = new JMenuItem("word"); JMenuItem menuitem3 = new JMenuItem("word"); public void init() { // setLayout(new FlowLayout()); // setVisible(true); menu1.add(menuitem1); menu1.add(menuitem2); menu1.add(menuitem3); menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menubar.add(menu4); } } class MyPanel extends JPanel{ public void init() { add(new JLabel("姓名:")); add(new JTextField(10)); add(new JButton("已输入")); } }为什么没有显示菜单栏

2023-05-29 上传
2023-05-27 上传