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("下拉列表");
}
}
运行结果:
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!