GUI图形编程-Swing

GUI图形编程-Swing

1.Swing简介

  • Swing API可扩展GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用。它是建立在AWT API之上,并作为AWT API的更换,因为它几乎每一个控制对应AWT控制。

  • Swing 组件遵循MVC(模型-视图-控制器)架构,MVC让负责显示的代码、处理数据的代码、对交互进行响应并驱动变化的代码彼此分离。

  • Swing包含了构建图形界面(GUI)的各种组件,如:窗口、标签、按钮、文本等。

  • Swing提供了许多比AWT更好的屏幕显示元素,使用纯JAVA实现,能够实现更好的兼容跨平台实现。

  • 为了和AWT组件区分,Swing组件在javax.swing.*包下,类名均以J开头,例如:JFrame\JLabel\JButton等。

    2.Swing组件

    一个Java图形界面,由各种不同类型的“元素”组成,例如:窗口、菜单栏、对话框、标签、按钮、文本框等等,这些“元素”统一被称为组件(component)。
    组件按照不同的功能,可分为 顶层容器、中间容器、基本组件。一个简单的窗口的组成,如下层级结构所示:

  • 顶层容器

    • 菜单栏
    • 中间容器
      • 基本组件
      • 基本组件

组件类型的继承关系:

  • 顶层容器,属于窗口类组件,继承自java.awt.Window;
  • 中间容器和基本组件继承自javax.swing.JComponent

2.1顶层容器

顶层容器属于窗口类组件,可以独立显示,一个图形界面至少需要一个窗口,例如:

组件 描述
JFrame 一个普通的窗口(绝大多数Swing图形界面程序使用JFrame作为顶层容器)
JDialog 对话框

2.2中间容器

中间容器充当基本组件的载体,不可独立显示。中间容器可以添加若干基本组件(也可以嵌套添加中间容器),对容器内的组件进行管理,类似于给各种复杂的组件进行分组管理。最顶层的一个中间容器必须依托在顶层容器(窗口内)。
常用的中间容器(面板):

组件 描述
JPanel 一个轻量级面板容器组件
JScrollPane 带滚动条的,可以水平和垂直滚动的面板组件
JSplitPane 分割面板
JTabbedPane 选项卡面板
JLayeredPane 层级面板

2.3基本组件

基本组件是直接实现人机交互的组件。
常用的简单的基本组件:

组件 描述
JLabel 标签
JButton 按钮
JRadioButton 单选按钮
JCheckBox 复选框
JToggleButton 开关按钮
JTextField 文本框
JPasswordField 密码框
JTextAre 文本区域
JComboBox 下拉列表框
JList 列表
JProgressBar 进度条
JSlider 滑块

选取器组件

组件 描述
JFileChooser 文件选取器
JColorChooser 颜色选取器

其他较为复杂的基本组件:

组件 描述
JTable 表格
JTree

3.布局管理器

Swing的各种组件( JComponent)添加到面板容器中( JPane),需要给面板容器指定布局管理器( LayoutManager),明确容器( Container)内的各个组件之间的排列布局方式。

常用的布局管理器:

# 布局管理器 描述
1 FlowLayout 流式布局,按组件加入的顺序,按照水平方向排列,排满一行换下一行继续排列
2 GridLayout 网格布局,把Container按指定行数分隔出若干网格,每一个网格按顺序放置一个控件
3 GridBagLayout 网格袋布局,按网格划分Container,每一个组件可占用一个或者多个网格,可将组件垂直/水平或者沿他们的基线对齐
4 BoxLayout 箱式布局,将Container中的多个组件按照水平或者垂直的方向排列
5 GroupLayout 分组布局,将组件按照层次分组(串行或并行)。分别确定组件组在水平和垂直方向上的位置
6 CardLayout 卡片布局,将Container中的每个组件看作一张卡片,一次只能显示一张卡片,默认显示第一张卡片。
7 BorderLayout 边界布局,把Container按照方位分为5个区域(东、西、南、北、中),每个区域放置一个组件。
8 SpringLayout 弹性布局,通过定义组件四条边的坐标位置来实现布局
9 null 绝对布局,通过设置组件在Container中的坐标来放置组件

4.Swing代码小实例

import javax.swing.*;
public class Main{
   
	public static void main(String []args){
   
		//1.创建一个顶层容器(窗口)
		JFrame jf = new JFrame("窗口");
		jf.setSize(250,250);
		jf.setLocationRelativeTO(null);//把窗口位置设置到屏幕中心
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//当前窗口的关闭
		//2.创建中间容器(面板容器)
		JPanel panel = new Panel();//创建面板容器使用默认的布局管理器
		//3.创建一个基本组件(按钮),并添加到面板容器中
		JButton button = new JButton("测试按钮");
		panel.add(button);
		//4.把面板容器作为窗口的内容面板设置到窗口
		Container container = jf.getContentPane();
		container.add(panel);
		//5.显示窗口,前面创建的信息都在内存中,通过jf.setVisible(true)把内存中的窗口显示在屏幕上。
		jf.setVisible(true);
		
	}
}

结果展示:
在这里插入图片描述

5.Swing组件代码实例

5.1新建一个JFrame窗口(带标签)

package com.xzit.lesson04;

import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class jFrameDemo {
   
	//init();初始化
	public void init() {
   
		//顶级窗口
		JFrame jf = new JFrame("这是一个JFrame窗口");
		jf.setVisible(true);
		jf.setBounds(100, 100, 200, 200);
	
		//设置文字 Jlable
		JLabel lable = new JLabel("欢迎来到狂神说Java系列节目");
		
		jf.add(lable);
		//获得一个容器,容器实例化
		Container Container = jf.getContentPane();
		Container.setBackground(Color.blue);
		jf.getContentPane();
		//关闭事件
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
   
		//建立一个窗口
		new jFrameDemo().init();

	}

}

结果展示:
在这里插入图片描述

5.2图片标签化

package com.xzit.lesson04;

import java.awt.Container;
import java.awt.Image;
import java.awt.Label;

import javax.print.DocFlavor.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class ImageIconDemo extends JFrame {
   
	public ImageIconDemo() {
   
		//获取图片的地址
		JLabel label = new JLabel("ImageIcon");
		java.net.URL url = ImageIconDemo.class.getResource("宁宁.jpg");
		ImageIcon imageIcon =new ImageIcon(url);//命名不要冲突
		label.setIcon(imageIcon);
		label.setHorizontalAlignment(SwingConstants.CENTER);
	    Container container = getContentPane();
	    container.add(label);
	    setVisible(true);
	    setDefaultCloseOperation(WindowConstants
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值