一、标签与按钮
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"); } }
运行结果:
二、文本输入组件
文本输入组件主要有:文本框(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("文本输入"); } }
运行结果:
三、复选框与单选按钮
多选组件是复选框(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("复选框与单选框"); } }
运行结果:
四、下拉列表
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("下拉列表"); } }
运行结果: