Java学习记录 Swing设计篇

本文详细介绍了Java Swing库的使用,包括Swing的基本特点、窗体设计、JFrame和JDialog窗体、图标使用、各种布局管理器如FlowLayout、BorderLayout、GridLayout和GridBagLayout,以及常用组件如按钮、列表、文本组件等。此外,还讲解了事件监听器ActionListener和FocusListener的使用。通过对Swing的学习,开发者可以创建丰富的GUI应用。
摘要由CSDN通过智能技术生成

Swing程序设计

Swing为GUI(图形用户界面)提供开发工具包,使用Swing开发的应用程序可以统一应用程序在不同平台上运行的GUI组件显示风格,因为在Swing组件可以跨平台指定统一风格和外观

特点:

  • 轻量级组件
  • 可插入外观组件

Swing包

使用Swing组件前,先了解层次结构和继承关系

常用的Swing组件

组件名称 说明
JButton(按钮) 按钮可以带些图片或文字
JCheckBox(多选按钮) 复选框组件
JComBox(下拉框) 代表下拉列表框,可以在下拉显示区域显示多个选项
JFrame(窗体) Swing的框架类
JDialog(对话框) Swing版本的对话框
JLable(标签) 标签组件(显示文字的容器)
JRadioButton(单选按钮) Swing的单选按钮
JList(列表框) 显示一系列条目的组件
JTextField(文本框) 文本框
JPasswordField(密码框) 密码框
JTextArea(文本域) Swing的文本区域
JOptionPane(小对话框) 对话框
JPanel(面板) 单纯的容器,无属性

窗体

窗体常用方法

setTitle(String title) 窗体标题为title字符串

setDefaultCloseOperation(int a) 窗体关闭规则

setSize(width,height) 窗体大小

setLocation(x,y) 窗体坐标

setBounds(x,y, width , height) 窗体坐标,大小 (像素)

setVisible(boolean b) 窗体是否显示,默认不可见(false)

setResizable(boolean b) 窗体是否可以调整大小,默认可以调整大小

setContentPane(容器) 重新加载容器

getContentPane() 获取窗体容器

JFrame 窗体

Class JFrame

java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame

JFrame窗体拥有计算机基本组件,最大化,最小化,关闭等组件

构造方法

JFrame()

JFrame(Starting title)

title: 窗体标题

import javax.swing.*;
import java.awt.*;

public class Demo {
   
    public static void main(String[] args) {
   
        //123为标题
        JFrame f = new JFrame("123");
        //窗体显示
        f.setVisible(true);
        
        //窗口关闭规则
        f.setDefaultCloseOperation(3);
//        f.setSize(330,220);//大小
//        f.setLocation(202,202);//坐标
        //坐标,大小 (x , y , width , height)单位:像素
        f.setBounds(200,200 , 300,300);
    
        //获取窗体容器
        Container c = f.getContentPane();
        //背景颜色
        c.setBackground(Color.CYAN);
        //标签内容
        JLabel l = new JLabel("这是一个窗体!!");
        //添加组件
        c.add(l);
        
    }
}

也可以

import javax.swing.*;
import java.awt.*;

public class Demo2 extends JFrame {
   
    
    public Demo2(){
   
        //窗体显示
        setVisible(true);
    
        //窗口关闭规则
        setDefaultCloseOperation(3);
//        f.setSize(330,220);//大小
//        f.setLocation(202,202);//坐标
        //坐标,大小 (x , y , width , height)单位:像素
        setBounds(200,200 , 300,300);
    
        //获取窗体容器
        Container c = getContentPane();
        //背景颜色
        c.setBackground(Color.CYAN);
        //标签内容
        JLabel l = new JLabel("这是一个窗体!!");
        //添加组件
        c.add(l);
        //删除组件
        c.remove(l);
        //验证容器中的组件
        c.validate();
        //重新载入容器
        setContentPane(c);
    }
    
    
    public static void main(String[] args) {
   
        new Demo2();
    }
}

运行结果

JDialog 窗体

Class JDialog

java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Dialog
javax.swing.JDialog

JDialog窗体是Swing的对话框,是从一个窗体中弹出另一个窗体,它继承了AWT组件中的

在一个类继承窗体类时,可以在构造方法中使用 super关键字 可调用回窗体类的参数填充

构造方法

JDialog()

JDialog(Frame f)

JDialog(Frame f , boolean model)

JDialog(Frame f , String title)

JDialog(Frame f , String title , boolean model)

f: 需要指定的父窗体
model: 指定类型的对话框(是否约束父窗体)
title: 对话框的标题

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

//JFrame父窗体类
class Parentform extends JFrame {
   
    
    JButton btn;
    public Parentform(){
   
        //为父类添加标题
        super("JFrame父窗体的标题");
        //窗体关闭规则
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //窗体显示
        setVisible(true);
        //窗体坐标,大小
        setBounds(300,230,400,340);
        //获取窗体容器
        Container c = getContentPane();
        //布局设置,使用流布局
        c.setLayout(new FlowLayout());
        //使类的btn共享到以下类输出
        this.btn = new JButton("对话框");
        //添加组件
        c.add(btn);
    }
    public JButton btn(){
   
        //输出组件添加动作监听
        return btn;
    }
}

//对话框类
class Dialog extends JDialog{
   
    public Dialog(Parentform p){
   
        //参数顺序: 1.父窗体对象 , 2.对话框标题 ,3.是否堵塞父窗体
        super(p,"123对话框",true);
        //获取对话框容器
        Container c = getContentPane();
        //对话框添加标签(内容)
        c.add(new JLabel("这是对话框!"));
        //对话框坐标,大小
        setBounds(360,300,120,100);
    }
}

public class Demo {
   
    public static void main(String[] args) {
   
        //实例JFrame父窗体类
        Parentform p = new Parentform();
        
        //添加动作监听
        p.btn().addActionListener(new ActionListener() {
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
                //实例对话框类,并获取p父窗体对象
                Dialog d = new Dialog(p);
                //显示对话框
                d.setVisible(true);
            }
        });
        //也可以  p.btn().addActionListener(e -> new Dialog());
    }
}

运行结果

窗体关闭规则

窗体的关闭规则是需要到 setDefaultCloseOperation()方法来选择关闭方式的

关闭类型 说明 定义
DO_NOTHING_ON_CLOSE 无任何操作 0
HIDE_ON_CLOSE(默认) 隐藏窗体,不停止程序 1
DISPOSE_ON_CLOSE 释放窗体资源 2
EXIT_ON_CLOSE 隐藏窗体,停止程序 3

图标

JLable 标签

Class JLabel

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JLabel

可以显示只读文本、图像,但不能产生任何类型的事件,只是简单的显示文本和图像,还可以设置标签上文本的对齐方式

构造方法

JLable()

JLable(String text)

JLable(Icon icon)

JLable(Icon icon , int aligment)

JLable(String text , int aligment)

JLable(String text , Icon icon , int aligment)

text: 标识性,文字标签
icon: 图标对象
aligment: 设置对齐方式

常用方法

修饰符、类型 方法 说明
void setText(String text) 定义组件内容(更改)
String getText() 返回标签显示的文本字符串
void setIcon(Icon icon) 添加图片文件
void setSize(int With ,int Height) 标签大小设置

构造方法的实践例子:(图片文件在src路径里)

import javax.swing.*;
import java.awt.*;
import java.net.URL;

//JFrame父窗体类
class Parentform extends JFrame {
   

    public Parentform(){
   
        //为父类添加标题
        super("JFrame父窗体的标题");
        //窗体关闭规则
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //窗体坐标,大小
        setBounds(200,0,620,800);
        //获取窗体容器
        Container c = getContentPane();
        //布局设置,使用流布局
        c.setLayout(new FlowLayout());
        
        
        JLabel no1 = new JLabel();
        JLabel no2 = new JLabel("标签内容");
        
        //获取图片的方法(方法1)
        //获取当前类所在的路径
        URL url = Demo.class.getResource("1.jpg");
        //获取相应路径下的文件(图片)
        Icon icon = new ImageIcon(url);
        JLabel no3 = new JLabel(icon);
        
        //获取图片的(方法2)
        Icon icon2 = new ImageIcon("src/1.jpg");
        JLabel no4 = new JLabel("显示图片",icon2, SwingConstants.LEFT);
        
        //更改标签内容
        no2.setText("更改标签内容");
        //获取标签内容
        System.out.println(no2.getText());
    
        //在窗体显示图片路径
        JLabel jl = new JLabel("获取图片路径:"+url.toString());
        c.add(jl);
        
        //自选打开
//        c.add(no1);
//        c.add(no2);
//        c.add(no3);
        c.add(no4);
        
        //显示在后面或者刷新组件
        //容器组件重新验证
        c.validate();
        //窗体显示
        setVisible(true);
    }
}

public class Demo {
   
    public static void main(String[] args) {
   
        new Parentform();
    }
}

运行结果

注意:

java.lang.Class类中的 getResource()方法 可以获取资源文件的URL路径

图标使用

创建图标

创建图标使用到 java.awt.Graphics类 提供的功能来实现

在Swing中是通过Icon接口来实现创建图标,使用Icon接口必须实现以下3个方法:

修饰符、类型 方法 说明
int getIconHeight() 获取图标高
int getIconWidth() 获取图标宽
void paintIcon(Component c, Graphics g, int x, int y) 指定坐标位置画图
import javax.swing.*;
import java.awt.*;

//JFrame父窗体类
class Parentform extends JFrame {
   
    
    public Parentform(){
   
        //为父类添加标题
        super("JFrame父窗体的标题");
        //窗体关闭规则
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //窗体显示
        setVisible(true);
        //窗体坐标,大小
        setBounds(300,230,300,200);
        //获取窗体容器
        Container c = getContentPane();
    }

}

//绘图图标类
//引入Icon接口
class DrawIcon implements Icon{
   
    // 声明图标的宽
    private int W;
    // 声明图标的高
    private int H;
    
    //获取数据
    public DrawIcon(int W , int H){
   
        this.W = W ;
        this.H = H ;
    }
    
    // 实现paintIcon()方法
    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
   
        // 绘制一个圆形
        g.fillOval(x , y , W , H);
    }
    
    @Override
    public int getIconWidth() {
   
        return this.W;
    }
    
    @Override
    public int getIconHeight() {
   
        return this.H;
    }
}

public class Demo {
   
    public static void main(String[] args) {
   
        DrawIcon icon = new DrawIcon(23, 23);
        // 创建一个标签,并设置标签上的文字在标签正中间
        JLabel j = new JLabel("测试", icon, SwingConstants.CENTER);
        Parentform jf = new Parentform();
        jf.add(j);
    }
}

运行结果

常用布局管理器

布局管理就是用于指定组件的摆放位置的。每种布局管理器都有自己的摆放风格。管理组件在容器中的位置和大小

需要该方法来定义窗体或面板布局

窗体或面板的对象.setLayout(布局类型);

绝对布局

绝对布局是指定组件在容器中的固定大小和位置

import javax.swing.*;
import java.awt.*;

//JFrame父窗体类
class Parentform extends JFrame {
   
    
    public Parentform(){
   
        //为父类添加标题
        super("JFrame父窗体的标题");
        //窗体关闭规则
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //窗体显示
        setVisible(true);
        //窗体坐标,大小
        setBounds(300,230,300,200);
        //获取窗体容器
        Container c = getContentPane();
        
        //取消默认布局 , 更改为绝对布局
        setLayout(null);
        
        //创建按钮组件
        JButton b1 = new JButton("按钮1") , b2 = new JButton("按钮2");
        
        //给按钮组件添加坐标、大小
        b1.setBounds(10,10,70,40);
        b2.setBounds(112,64,92,60);
        
        //添加按钮组件
        c.add(b1);
        c.add(b2);
    }
    
}

public class Demo {
   
    public static void main(String[] args) {
   
        Parentform jf = new Parentform();
    }
}

运行结果

注意:

绝对布局的窗口组件大小都是固定的,不随窗体大小更改而变化

组件坐标是以窗体左上角为基点的

FlowLayout 流布局

Class FlowLayout

java.lang.Object
java.awt.FlowLayout

流布局管理器 ,像流水一样从左到右摆放组件,直到占完所有空间,组件是默认居中排列

构造方法

FlowLayout()

FlowLayout(int alignment)

FlowLayout(int alignment , int horizGap , int vertGap)

alignment: 摆放方式
horizGap: 组件之间的水平间距
vertGap: 组件之间的垂直间距

alignment参数的摆放设置 说明 定义
FlowLayout.LEFT 左对齐排列 0
FlowLayout.CENTER 居中排列 1
FlowLayout.RIGHT 右对齐排列 2

horizGap : 组件与组件之间的水平间距(像素)

vertGap : 组件与组件之间的垂直间距(像素)

import javax.swing.*;
import java.awt.*;

//JFrame父窗体类
class Parentform extends JFrame {
   
    
    public Parentform(){
   
        //为父类添加标题
        super("JFrame父窗体的标题");
        //窗体关闭规则
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //窗体坐标,大小
        setBounds(300,230,300,200);
        //获取窗体容器
        Container c = getContentPane();
        
        //流布局
        //参数测试,自行选择
//        setLayout(new FlowLayout());
//        setLayout(new FlowLayout(0));//左对齐
//        setLayout(new FlowLayout(1));//居中对齐(默认)
//        setLayout(new FlowLayout(2));//右对齐
        setLayout(new FlowLayout(1 , 20, 20));//居中对齐(默认)
        
        //创建添加按钮组件
        for (int i = 0; i < 10; i++) {
   
            c.add(new JButton("按钮"+i));
        }
        
        //窗体显示
        setVisible(true);
    }
}

public class Demo {
   
    public static void main(String[] args) {
   
        new Parentform();
    }
}

运行结果

BorderLayout 边界布局

Class BorderLayout

java.lang.Object
java.awt.BorderLayout

边界布局把容器的的布局分为五个位置:上下左右中5个区域 。设置该布局管理器是可无视,因默认是边界布局

在容器add()方法添加组件时可设置区域

成员变量 说明
BorderLayout.NORTH 顶端
BorderLayout.SOUTH 底端
BorderLayout.EAST 右端
BorderLayout.WEST 左端
BorderLayout.CENTER 中间
import javax.swing.*;
import java.awt.*;

//JFrame父窗体类
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值