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 :[email protected]
 * @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");
    }
}

运行结果:
在这里插入图片描述

二、文本输入组件

文本输入组件主要有:文本框(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 :[email protected]
 * @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("文本输入");
    }
}

运行结果:
在这里插入图片描述

三、复选框与单选按钮

多选组件是复选框(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 :[email protected]
 * @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("复选框与单选框");
    }
}

运行结果:
在这里插入图片描述

四、下拉列表

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

JComboBox常用的构造方法有:

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

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

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

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @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("下拉列表");
    }
}

运行结果:
在这里插入图片描述

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

发布了69 篇原创文章 · 获赞 7 · 访问量 3310

猜你喜欢

转载自blog.csdn.net/weixin_45366499/article/details/104504860