我们知道一个完整的程序界面包括窗口和窗口中的各种组件,常见的组件有按钮,文本框,下拉框等等。Swing中也有类似这样的组件,它们是怎么用的呢?今天就和大家一起学习回顾一下这方面的知识。 本篇介绍:JLabel、JButton、JTextField 、JTextArea 、JCheckBox、JRadioButton 、JComboBox 和JList这8种常见组件
一、标签组件:JLabel
标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。
-
构造方法如下:
-
常用方法如下:
-
以下是一个例子:
创建3个标签
package swing;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*使用 JFrame 组件创建一个窗口,然后向窗口中添加 3 个标签,
*这 3 个标签分别使用不同的创建方法。
*/
public class Demo09_JLabel {
public static void main(String[] args) {
JFrame frame=new JFrame("Java标签组件示例"); //创建Frame窗口
JPanel jp=new JPanel(); //创建面板
JLabel label1=new JLabel("普通标签"); //创建标签
JLabel label2=new JLabel();
label2.setText("调用setText()方法");
ImageIcon img=new ImageIcon("kitty.png"); //创建一个图标
//创建既含有文本又含有图标的JLabel对象
JLabel label3=new JLabel("开始理财",img,JLabel.CENTER);
jp.add(label1); //添加标签到面板
jp.add(label2);
jp.add(label3);
frame.add(jp);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
二、按钮组件:JButton
按钮是窗口中最常见的组件之一。
- 构造方法如下:
- 常用方法有以下这些:
- 以下是一个例子:
创建4个按钮
package swing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
/**
* 使用 JFrame 组件创建一个窗口,然后创建 4 个不同类型的按钮,再分别添加到窗口上显示。
*/
public class Demo10_JButton {
public static void main(String[] args) {
JFrame frame=new JFrame("Java按钮组件示例"); //创建Frame窗口
JPanel jp=new JPanel(); //创建JPanel对象
JButton btn1=new JButton("我是普通按钮"); //创建JButton对象
JButton btn2=new JButton("我是带背景颜色按钮");
JButton btn3=new JButton("我是不可用按钮");
JButton btn4=new JButton("我是底部对齐按钮");
jp.add(btn1);
btn2.setBackground(Color.YELLOW); //设置按钮背景色
jp.add(btn2);
btn3.setEnabled(false); //设置按钮不可用
jp.add(btn3);
Dimension preferredSize=new Dimension(160, 60); //设置尺寸
btn4.setPreferredSize(preferredSize); //设置按钮大小
btn4.setVerticalAlignment(SwingConstants.BOTTOM); //设置按钮垂直对齐方式
jp.add(btn4);
frame.add(jp);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
三、单行文本框:JTextField
Swing 中使用 JTextField 类实现一个单行文本框,它允许用户输入单行的文本信息。
- 构造方法如下:
- 常用方法有以下这些:
- 以下是一个例子:
在窗体中添加3个文本框
package swing;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* 使用 JPrame 组件创建一个窗口,然后向窗口中添加三个 JTextField 文本框。
*/
public class Demo11_JTextField {
public static void main(String[] args) {
JFrame frame=new JFrame("Java文本框组件示例"); //创建Frame窗口
JPanel jp=new JPanel(); //创建面板
JTextField txtfield1=new JTextField(); //创建文本框
txtfield1.setText("普通文本框"); //设置文本框的内容
JTextField txtfield2=new JTextField(28);
txtfield2.setFont(new Font("楷体",Font.BOLD,16)); //修改字体样式
txtfield2.setText("指定长度和字体的文本框");
JTextField txtfield3=new JTextField(30);
txtfield3.setText("居中对齐");
txtfield3.setHorizontalAlignment(JTextField.CENTER); //居中对齐
jp.add(txtfield1);
jp.add(txtfield2);
jp.add(txtfield3);
frame.add(jp);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
四、文本域组件:JTextArea
文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。
- 构造方法1: JTextArea():创建一个默认的文本域。
- 构造方法2: JTextArea(int rows,int columns):创建一个具有指定行数和列数的文本域。
- 构造方法3: JTextArea(String text):创建一个包含指定文本的文本域。
- 构造方法4: JTextArea(String text,int rows,int
columns):创建一个既包含指定文本,又包含指定行数和列数的多行文本域。
常用方法如下:
- 以下是一个例子: 在窗体中添加一个文本域
package swing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* 使用 JFrame 组件创建一个窗口,再向窗口中添加一个文本域,
* 并将文本域中的文本设置为自动换行,允许显示滚动条。
* */
public class Demo12_JTextArea {
public static void main(String[] args) {
JFrame frame=new JFrame("Java文本域组件示例"); //创建Frame窗口
JPanel jp=new JPanel(); //创建一个JPanel对象
JTextArea jta=new JTextArea("请输入内容",7,30);
jta.setLineWrap(true); //设置文本域中的文本为自动换行
jta.setForeground(Color.BLACK); //设置组件的背景色
jta.setFont(new Font("楷体",Font.BOLD,16)); //修改字体样式
jta.setBackground(Color.YELLOW); //设置按钮背景色
JScrollPane jsp=new JScrollPane(jta); //将文本域放入滚动窗口
Dimension size=jta.getPreferredSize(); //获得文本域的首选大小
jsp.setBounds(110,90,size.width,size.height);
jp.add(jsp); //将JScrollPane添加到JPanel容器中
frame.add(jp); //将JPanel容器添加到JFrame容器中
frame.setBackground(Color.LIGHT_GRAY);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
}
}
五、复选框组件:JCheckBox
一个复选框有选中和未选中两种状态,并且可以同时选定多个复选框。
-
构造方法1: JCheckBox():创建一个默认的复选框,在默认情况下既未指定文本,也未指定图像,并且未被选择。
-
构造方法2: JCheckBox(String text):创建一个指定文本的复选框。
-
构造方法3: JCheckBox(String text,boolean selected):创建一个指定文本和选择状态的复选框。
-
以下是一个例子: 在窗体中添加几个复选框
package swing;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* 使用 JFmme 组件创建一个窗口,然后使用 JCheckBox 类创建一些复选框。
*/
public class Demo13_JCheckBox {
public static void main(String[] args) {
JFrame frame=new JFrame("Java复选组件示例"); //创建Frame窗口
JPanel jp=new JPanel(); //创建面板
JLabel label=new JLabel("流行编程语言有:");
label.setFont(new Font("楷体",Font.BOLD,16)); //修改字体样式
JCheckBox chkbox1=new JCheckBox("C#", true); //创建指定文本和状态的复选框
JCheckBox chkbox2=new JCheckBox("C++"); //创建指定文本的复选框
JCheckBox chkbox3=new JCheckBox("Java"); //创建指定文本的复选框
JCheckBox chkbox4=new JCheckBox("Python"); //创建指定文本的复选框
JCheckBox chkbox5=new JCheckBox("PHP"); //创建指定文本的复选框
JCheckBox chkbox6=new JCheckBox("Perl"); //创建指定文本的复选框
jp.add(label);
jp.add(chkbox1);
jp.add(chkbox2);
jp.add(chkbox3);
jp.add(chkbox4);
jp.add(chkbox5);
jp.add(chkbox6);
frame.add(jp);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
六、单选按钮组件:JRadioButton
单选按钮与复选框类似都有两种状态,不同的是一组单选按钮中只能有一个处于选中状态。
JRadioButton 通常位于一个 ButtonGroup 按钮组中,不在按钮组中的 JRadioButton 也就失去了单选按钮的意义在同一个 ButtonGroup 按钮组中的单选按钮,只能有一个单选按钮被选中。因此,如果创建的多个单选按钮其初始状态都是选中状态,则最先加入 ButtonGroup 按钮组的单选按钮的选中状态被保留,其后加入到 ButtonGroup 按钮组中的其他单选按钮的选中状态被取消。
- 构造方法1: JRadioButton():创建一个初始化为未选择的单选按钮,其文本未设定。
- 构造方法2: JRadioButton(Icon icon):创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本。
- 构造方法3: JRadioButton(Icon icon,boolean
selected):创建一个具有指定图像和选择状态的单选按钮,但无文本。 - 构造方法4: JRadioButton(String text):创建一个具有指定文本但未选择的单选按钮。
- 构造方法5: JRadioButton(String text,boolean
selected):创建一个具有指定文本和选择状态的单选按钮。 - 构造方法6: JRadioButton(String text,Icon
icon):创建一个具有指定的文本和图像并初始化为未选择的单选按钮。 - 构造方法7: JRadioButton(String text,Icon icon,boolean
selected):创建一个具有指定的文本、图像和选择状态的单选按钮。
以下是一个例子:
创建一个选择季节的单选按钮组
package swing;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
/**
* 使用 JFrame 组件创建一个窗口,
* 然后使用 JRadioButton 类创建一个选择季节的单选按钮组。
*/
public class Demo14_JRadioButton {
public static void main(String[] args) {
JFrame frame=new JFrame("Java单选组件示例"); //创建Frame窗口
JPanel panel=new JPanel(); //创建面板
JLabel label1=new JLabel("现在是哪个季节:");
JRadioButton rb1=new JRadioButton("春天"); //创建JRadioButton对象
JRadioButton rb2=new JRadioButton("夏天"); //创建JRadioButton对象
JRadioButton rb3=new JRadioButton("秋天",true); //创建JRadioButton对象
JRadioButton rb4=new JRadioButton("冬天"); //创建JRadioButton对象
label1.setFont(new Font("楷体",Font.BOLD,16)); //修改字体样式
ButtonGroup group=new ButtonGroup();
//添加JRadioButton到ButtonGroup中
group.add(rb1);
group.add(rb2);
group.add(rb3);
group.add(rb4);
panel.add(label1);
panel.add(rb1);
panel.add(rb2);
panel.add(rb3);
panel.add(rb4);
frame.add(panel);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
七、下拉列表组件:JComboBox
下拉列表的特点是将多个选项折叠在一起,只显示最前面的或被选中的一个。选择时需要单击下拉列表右边的下三角按钮,这时候会弹出包含所有选项的列表。用户可以在列表中进行选择,也可以根据需要直接输入所要的选项,还可以输入选项中没有的内容。
- 构造方法1: JComboBox():创建一个空的 JComboBox 对象。
- 构造方法2: JComboBox(ComboBoxModel aModel):创建一个 JComboBox,其选项取自现有的
ComboBoxModel。 - 构造方法3: JComboBox(Object[] items):创建包含指定数组中元素的 JComboBox。
常用方法如下:
以下是一个例子:
创建一个包含4个选项的下拉框
package swing;
import java.awt.Toolkit;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* 使用 JFrame 组件创建一个窗口,
* 然后使用 JComboBox 类创建一个包含4个选项的下拉列表框。
*/
public class Demo15_JComboBox {
public static void main(String[] args) {
JFrame frame=new JFrame("Java下拉列表组件示例");
JPanel jp=new JPanel(); //创建面板
JLabel label1=new JLabel("证件类型:"); //创建标签
JComboBox cmb=new JComboBox(); //创建JComboBox
cmb.addItem("--请选择--"); //向下拉列表中添加一项
cmb.addItem("身份证");
cmb.addItem("驾驶证");
cmb.addItem("军官证");
jp.add(label1);
jp.add(cmb);
frame.add(jp);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
八、列表框:JList
列表框与下拉列表的区别不仅仅表现在外观上,当激活下拉列表时,会出现下拉列表框中的内容。但列表框只是在窗体系上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放到滚动面板中。当用户选择列表框中的某一项时,按住 Shift 键并选择列表框中的其他项目,可以连续选择两个选项之间的所有项目,也可以按住 Ctrl 键选择多个项目。
- 构造方法1: JList():构造一个空的只读模型的列表框。
- 构造方法2: JList(ListModel dataModel):根据指定的非 null 模型对象构造一个显示元素的列表框。
- 构造方法3: JList(Object[] listData):使用 listData 指定的元素构造—个列表框。
- 构造方法4: JList(Vector<?> listData):使用 listData 指定的元素构造一个列表框。
以下是一个例子:
创建一个包含3个选项的列表框
package swing;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
/**
* 使用 JFmme 组件创建一个窗口,
* 然后使用 JList 类创建一个包含3个选项的列表框。
*/
public class Demo16_JList {
public static void main(String[] args) {
JFrame frame=new JFrame("Java列表框组件示例");
JPanel jp=new JPanel(); //创建面板
JLabel label1=new JLabel("证件类型:"); //创建标签
String[] items=new String[]{"身份证","驾驶证","军官证"};
JList list=new JList(items); //创建JList
jp.add(label1);
jp.add(list);
frame.add(jp);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
JList 组件在默认情况下支持单选和多选,可以通过 setSelectionMode() 方法来限制选择行为
- setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)——允许选择一个或多个连续的元素。
- setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)——允许选择一个连续的元素。