Swing组件(上)

简介: Swing所有组件都继承自JComponent,主要有文本处理、按钮、标签、列表、面板、组合框、滚动条、滚动面板、菜单、表格和树等组件。

一、标签与按钮


Swing中标签类是JLabel,它不仅可以显示文本还可以显示图标,JLabel的构造方法如下:


JLabel():创建一个无图标无标题标签对象。

JLabel(Icon image):创建一个具有图标的标签对象。

JLabel(Icon image, int horizontalAlignment):通过指定图标和水平对齐方式创建标签对象。

JLabel(String text):创建一个标签对象,并指定显示的文本。

JLabel(String text, Icon icon, int horizontalAlignment):通过指定显示的文本、图标和水平对齐方 式创建标签对象。

JLabel(String text, int horizontalAlignment):通过指定显示的文本和水平对齐方式创建标签对象。

上述构造方法horizontalAlignment参数是水平对齐方式,它的取值是SwingConstants 中定义的以下常量之一:LEFT、CENTER、RIGHT、LEADING 或 TRAILING。


Swing中的按钮类是JButton,JButton不仅可以显示文本还可以显示图标,JButton常用的构造方法有:


JButton():创建不带文本或图标的按钮对象。

JButton(Icon icon):创建一个带图标的按钮对象。

JButton(String text):创建一个带文本的按钮对象。

JButton(String text, Icon icon):创建一个带初始文本和图标的按钮对象。

下面通过示例介绍一下标签和按钮中使用图标,当单击按钮时标签可以切换图标:

import javax.swing.*;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/24
 * @time : 2:56 下午
 */
public class MyFrame extends JFrame {
//    用于标签切换的图标
    protected static Icon images[] = {new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/10.png"),
        new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/11.png"),
        new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/4.png"),
        new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/8.png"),
        new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/7.png")
    };
//    设置当前索引
    private static  int currentpage = 0;
    public MyFrame(String title){
        super(title);
//        设置窗口不变
        setResizable(false);
//        不设置布局管理
        getContentPane().setLayout(null);
//        创建标签
        JLabel label = new JLabel(images[0]);
//        设置标签的位置和大小
        label.setBounds(200,50,100,100);
//        设置标签文本水平居中
        label.setHorizontalAlignment(SwingConstants.CENTER);
//        添加标签到内容面板
        getContentPane().add(label);
//        创建向后翻按钮
        JButton button1 = new JButton(new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/1.png"));
//        设置按钮的位置和大小
        button1.setBounds(350,250,100,80);
//        添加按钮到内容面板
        getContentPane().add(button1);
//        创建向前翻按钮
        JButton button2 = new JButton(new ImageIcon("/Users/caizhengjie/Desktop/Swing相关图标/9.png"));
//        设置按钮的位置和大小
        button2.setBounds(50,250,100,80);
//        添加按钮到内容面板
        getContentPane().add(button2);
//        设置窗口大小
        setSize(500,400);
//        设置窗口可见
        setVisible(true);
//        注册事件监听器,监听向后翻页按钮事件
        button1.addActionListener((event) ->{
            if (currentpage < images.length-1){
                currentpage++;
            }
            label.setIcon(images[currentpage]);
        });
//        注册事件监听器,监听向后前页按钮事件
        button2.addActionListener((event) ->{
            if (currentpage >0){
                currentpage--;
            }
            label.setIcon(images[currentpage]);
        });
    }
}

调用代码:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("cai");
    }
}

运行结果:


1.png


二、文本输入组件


文本输入组件主要有:文本框(JTextField)、密码框(JPasswordField)和文本区(JTextArea)。文本框 和密码框都只能输入和显示单行文本。当按下Enter键时,可以触发ActionEvent事件。而文本区可以输 入和显示多行多列文本。

文本框(JTextField)常用的构造方法有:


JTextField():创建一个空的文本框对象。

JTextField(int columns):指定列数,创建一个空的文本框对象,列数是文本框显示的宽度,列数 主要用于FlowLayout布局。

JTextField(String text):创建文本框对象,并指定初始化文本。

JTextField(String text, int columns):创建文本框对象,并指定初始化文本和列数。

JPasswordField继承自JTextField构造方法类似

文本区(JTextArea)常用的构造方法有:


JTextArea():创建一个空的文本区对象。

JTextArea(int rows, int columns):创建文本区对象,并指定行数和列数。

JTextArea(String text):创建文本区对象,并指定初始化文本。

JTextArea(String text, int rows, int columns):创建文本区对象,并指定初始化文本、行数和列 数。

下面通过示例介绍一下文本输入组件:

import javax.swing.*;
import java.awt.*;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/24
 * @time : 3:45 下午
 */
public class MyFrame extends JFrame {
    private JTextField jTextField;
    private JPasswordField jPasswordField;
    public MyFrame(String title){
        super(title);
//        设置布局管理
        getContentPane().setLayout(new BorderLayout());
//        创建一个面板Pane11,放置TextField和password
        JPanel panel1 = new JPanel();
//        将panel1添加到内容面板
        getContentPane().add(panel1,BorderLayout.NORTH);
//        创建账号标签
        JLabel label1 = new JLabel("账号:");
//        添加标签到面板
        panel1.add(label1);
//       创建账号文本框
        jTextField = new JTextField(12);
//        添加文本框到面板panel1
        panel1.add(jTextField);
//        创建密码标签
        JLabel label2 = new JLabel("密码:");
//        添加标签到面板
        panel1.add(label2);
//        创建密码文本框
        jPasswordField = new JPasswordField(12);
//        添加标签到面板
        panel1.add(jPasswordField);
//        创建一个面板pane2放置TextArea
        JPanel panel2 = new JPanel();
//        将panel2添加到内容面板
        getContentPane().add(panel2,BorderLayout.SOUTH);
//        创建标签
        JLabel label3 = new JLabel("TextArea:");
//        将标签添加到panel2面板
        panel2.add(label3);
//        创建文本区
        JTextArea textArea = new JTextArea(3,20);
        panel2.add(textArea);
//        设置窗口大小,紧凑排列,作用相当于setSize()
        pack();
//        设置窗口可见
        setVisible(true);
        jPasswordField.addActionListener((event) ->{
            textArea.setText("在文本框上按Enter键");
        });
    }
}

调用代码:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("文本输入");
    }
}

运行结果:

2.png


三、复选框与单选按钮


多选组件是复选框(JCheckBox),复选框(JCheckBox)有时也单独使用,能提供两种状态的开和关。单选组件是单选按钮(JRadioButton),同一组的多个单选按钮应该具有互斥特性。

JCheckBox主要构造方法如下:


JCheckBox():创建一个没有文本、没有图标并且最初未被选定的复选框对

JCheckBox(Icon icon):创建有一个图标、最初未被选定的复选框对象。

JCheckBox(Icon icon, boolean selected):创建一个带图标的复选框对象,并指定其最初是否处于 选定状态。

JCheckBox(String text):创建一个带文本的、最初未被选定的复选框对象。

JCheckBox(String text, boolean selected):创建一个带文本的复选框对象,并指定其最初是否处于选定状态。

JCheckBox(String text, Icon icon):创建带有指定文本和图标的、最初未被选定的复选框对象。

JCheckBox(String text, Icon icon, boolean selected):创建一个带文本和图标的复选框对象,并指 定其最初是否处于选定状态。

JCheckBox和JRadioButton它们有着相同的父类JToggleButton,有着相同方法和类似的构造方法


下面通过示例介绍一下复选框和单选按钮:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/24
 * @time : 4:30 下午
 */
public class MyFrame extends JFrame implements ItemListener {
//    声明并创建RadioButton对象,创建两个单选按钮对象
    private JRadioButton radioButton1 = new JRadioButton("男");
    private JRadioButton radioButton2 = new JRadioButton("女");
    public MyFrame(String title){
        super(title);
//        设置布局管理
        getContentPane().setLayout(new BorderLayout());
//        创建一个面板pane1
        JPanel panel1 = new JPanel();
        FlowLayout flowLayout1 = (FlowLayout) panel1.getLayout();
        flowLayout1.setAlignment(FlowLayout.LEFT);
//        将面板pane1添加到内容面板
        getContentPane().add(panel1,BorderLayout.NORTH);
//        创建标签
        JLabel label1 = new JLabel("请选择你喜欢的编程语言:");
//        添加标签到面板
        panel1.add(label1);
        JCheckBox checkBox1 = new JCheckBox("Java");
        panel1.add(checkBox1);
        JCheckBox checkBox2 = new JCheckBox("python");
        panel1.add(checkBox2);
        JCheckBox checkBox3 = new JCheckBox("php");
        panel1.add(checkBox3);
//        注册checkBox3对ActionEvent事件监听
        checkBox3.addActionListener((event) ->{
//            打印checkBox3状态
            System.out.println(checkBox3.isSelected());
        });
//        创建一个面板pane2
        JPanel panel2 = new JPanel();
        FlowLayout flowLayout2 = (FlowLayout) panel2.getLayout();
        flowLayout2.setAlignment(FlowLayout.LEFT);
//        将面板pane1添加到内容面板
        getContentPane().add(panel2,BorderLayout.SOUTH);
//        创建标签
        JLabel label2 = new JLabel("请选择性别:");
//        添加标签到面板
        panel2.add(label2);
//        创建ButtonGroup对象
        ButtonGroup buttonGroup = new ButtonGroup();
//       添加RadioButton到ButtonGroup对象
        buttonGroup.add(radioButton1);
        buttonGroup.add(radioButton2);
//        添加RadioButton到面板pane2
        panel2.add(radioButton1);
        panel2.add(radioButton2);
//        为了监听两个单选按钮的选择状态,注册ItemEvent事件监听
        radioButton1.addItemListener(this);
        radioButton2.addItemListener(this);
//      设置窗口大小
        pack();
//        设置窗口可见
        setVisible(true);
    }
    @Override
//    实现ItemListener接口方法e.getItem()获得按钮引用,然后通过getText()方法获得按钮的文本的标签
    public void itemStateChanged(ItemEvent e) {
//        判断按钮是否被选中,则通过
        if (e.getStateChange() == ItemEvent.SELECTED){
            JRadioButton button = (JRadioButton) e.getItem();
            System.out.println(button.getText());
        }
    }
}

调用代码:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("复选框与单选框");
    }
}

运行结果:

3.png


四、下拉列表


Swing中提供了下拉列表(JComboBox)组件,每次只能选择其中的一项。


JComboBox常用的构造方法有:


JComboBox():创建一个下拉列表对象。

JComboBox(Object [] items):创建一个下拉列表对象,items设置下拉列表中选项。下拉列表中 选项内容可以是任意类,而不再局限于String。

下面通过示例介绍一下拉列表组件:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/24
 * @time : 7:19 下午
 */
public class MyFrame extends JFrame {
//    声明下来列表JComboBox
    private JComboBox choice1;
    private JComboBox choice2;
    private static String[] s1 = {"Java","python","php","c++","go","c","Javascript"};
    private static String[] s2 = {"男","女"};
    public MyFrame(String title){
        super(title);
//        设置布局管理
        getContentPane().setLayout(new GridLayout(2,2,0,0));
//        创建标签
        JLabel label1 = new JLabel("选择你喜欢的语言:");
        label1.setHorizontalAlignment(SwingConstants.RIGHT);
        getContentPane().add(label1);
//        实例化JComboBox对象
        choice1 = new JComboBox(s1);
//        注册Action事件监听,采用Lambda表达式
        choice1.addActionListener((event) -> {
            JComboBox cb = (JComboBox) event.getSource();
//            获得选择项目
            String itemString = (String) cb.getSelectedItem();
            System.out.println(itemString);
        });
        getContentPane().add(choice1);
//        创建标签
        JLabel label2 = new JLabel("选择性别:");
        label2.setHorizontalAlignment(SwingConstants.RIGHT);
        getContentPane().add(label2);
//        实例化JComboBox对象
        choice2 = new JComboBox(s2);
//        注册Action事件监听,采用Lambda表达式
        choice2.addItemListener(e -> {
//            获得选择项目
            if (e.getStateChange() == ItemEvent.SELECTED){
//                获得选择项目
                String itemString = (String) e.getItem();
                System.out.println(itemString);
            }
        });
        getContentPane().add(choice2);
//        设置窗口大小
        setSize(400,150);
//        设置窗口可见
        setVisible(true);
    }
}

调用代码:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("下拉列表");
    }
}

运行结果:

4.png





相关文章
|
8月前
|
Java
Swing事件监听
Swing事件监听
|
9月前
|
存储 Java 图形学
【Java Swing】重绘基本实现
【Java Swing】重绘基本实现
47 0
|
Java 开发工具 容器
|
存储 Java 人机交互
Java GUI Swing组件
Java GUI Swing组件
185 0
Java GUI Swing组件
|
设计模式 前端开发
Swing设计一个下载器
1、package DownLoader.ui 中的类:APPMain、DownLoaderJFrame、MyProgressBar 2、package DownLoader.utils 中类:ClimbNetPage、DownLoader、DownLoaderTask、ImageUtil、Speeder 3、package DownLoaderTableMode 中的类:DownLoaderTableMode_Observer 4、package MyDataBasic 中的类TestDataBasic
158 0