Java学习笔记之Swing(三)
Swing中的常用控件
你将学到:
- 了解如何创建文本框和文本框的实际应用;
- 了解如何创建复选框和复选框的实际应用;
- 了解如何创建单选按钮和单选按钮的实际应用;
文本框
文本框和按钮一样,都是非常常用的控件,文本框提供了一个输 入信息的控件。
文本框是通过JTextField类来创建的,在创建的文本框中当文本超出文本框规定长度时,将自动滚动文本显示。文本框是通过JTextField类的构造器创建的,包括5种构造器,如表所示。
构造器 | 说明 |
---|---|
public JTextFiled() | 创建普通的文本框 |
public JTextFiled(String text) | 创建右默认值的文本框 |
public JTextFiled(int columns) | 创建指定长度的文本框 |
public JTextFiled(String text,int columns) | 创建指定长度和指定文本内容的文本框 |
public JTextFiled(Documents doc,String text,int columens) | 创建具有默认值,长度和文本内容的文本框 |
文本框也是会触发事件的,它和按钮一样,都是触发ActionEvent事件。按钮是被单击时触发事件,而文本框是当用户按下回车键时触发事件。
多行文本框
当希望进行多行输入时,文本框就不能满足其要求,这时候就需要创建多行文本框。多行文本框也是文本框的一种特殊形式,多行文本框是通过JTextArea类实现的。JTextArea类中提供了6种构 造器来创建多行文本框,构造器如表所示。
构造器|说明
------|----
public TextArea()|创建没有内容的多行文本框,默认的行数和列数为0
public TextArea(String text)|创建指定内容的文本框,默认的行数和列数为0
public TextArea(int row,int columns)|创建一个指定行和列的多行文本框
public TextArea(String text,int row,int columns)|创建指定行,列和文本内容的多行文本框
public TextArea(Documents doc)|创建具有文档模型的多行文本框。默认的行和列为0
public TextArea(Documents doc,String text,int row,int columns)|创建指定文本模型、文本内容、列和行的多行文本框
密码框
密码框是文本框的改进的控件,是一种专门用于输入密码的文本 框。在文本框中输入信息后,将不直接显示输入的信息,而是使 用特定的特殊字符来进行显示。密码框是通过JPasswordField类 来创建的,因为密码框和文本框的关系,所以JPasswordField类的构造器是和JTextField类的构造器相同的。
复选框和单选按钮
复选框和单选按钮具有很多相似的地方,它们在实际开发中也经 常要使用到。例如需要用户来选择兴趣爱好时,一般都很少是只 有一个爱好的,这里就可以创建复选框来实现其功能,来让用户 进行多项选择操作。但是例如性别等信息,是不可能存在多个选 择的,它只能在有限的几个选项中选择其中一个,这里就可以使 用单选按钮。
复选框
通过JRadioButton与ButtonGroup的配合使用,可以很方便地实现 单项选择。若需要使用多项选择,则应该使用复选框——JCheckBox类。与JRadioButton的不同是,JCheckBox不需要编组 使用,各个选项之间没有逻辑约束关系。 该类提供了8个构造器,表中列出了其中7个比较常用的。
构造器 | 说明 |
---|---|
public JCheckBox() | 创建没有任何内容的复选框 |
public JCheckBox(Icon icon) | 创建指定图标的复选框 |
public JCkeckBox(Icon icon,boolean selected) | 创建指定图标以及是否被选中的复选框(若布尔值为true则表示被选中) |
public JCkeckBox(String text) | 指定复选框的内容 |
public JCheckBox(String text,boolean selected) | 创建指定文本以及是否被选中的复选框 |
public JCheckBox(String text,Icon icon) | 创建指定文本和图标的复选框 |
public JCkeckBox(String text,Icon icon,boolean selected) | 创建指定文字、图标以及确定是否被选中的复选框 |
实例代码: |
public class JCheckBoxTest {
private static void constructGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("JCheckBox Test");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//JCheckBox ac = new JCheckBox("A/C",true);使用复选框的两个参数的构造器来简化代码
JCheckBox ac = new JCheckBox("A/C");
ac.setSelected(true);
JCheckBox cdPlayer = new JCheckBox("CD Player");
JCheckBox cruiseControl = new JCheckBox("Cruise Control");
JCheckBox keylessEntry = new JCheckBox("Keyless Entry");
JCheckBox antiTheft = new JCheckBox("Anti-Theft Alarm");
JCheckBox centralLock = new JCheckBox("Central Lock");
frame.add(new JLabel("Car Features"));
frame.add(ac);
frame.add(cdPlayer);
frame.add(cruiseControl);
frame.add(keylessEntry);
frame.add(antiTheft);
frame.add(centralLock);
frame.pack();//pack()方法可以将JFrame内容面板中的控件调整到适合的尺寸和布局
frame.setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
constructGUI();
}
});
}
}
如果我们不想调用pack方法的话,我们可以调用JFrame的setSize和SetBounds方法。需要注意的是我们需要在setVisible方法前调用这两个方法。
效果图:
单选按钮
单选按钮是一种只能在一组选项中选择其中一个选项的控件。单选按钮是通过使用JRadioButton类来创建的,在JRadioButton类 中具有7种构造器形式,构造器如表所示。
构造器|说明
-----|----
public JRadioButton()|创建没有文字、图标以及没有被选中的按钮
public JRadioButton(Icon icon)|创建一个具有图标的按钮
public JRadioButton(Icon icon,boolean selected)|创建指定图标,以及确定是否被选中的按钮
public JRadioButton(String text)|创建一个指定按钮文字的按钮
public JRadioButton(String text,boolean selected)|创建指定文字以及确定选中与否的按钮
public JRadioButton(String text,Icon icon)|创建有文字和图标的按钮
public JRadioButton(String text,Icon icon,boolean selected)|创建指定文本、按钮以及是否被选中的按钮
实例代码:
//创建三个单选按钮
JRadioButton button1 = new JRadioButton("Red");
JRadioButton button2 = new JRadioButton("Green");
JRadioButton button3 = new JRadioButton("Blue");
// 创建按钮组
ButtonGroup colorButtonGroup = new ButtonGroup();
colorButtonGroup.add(button1);
colorButtonGroup.add(button2);
colorButtonGroup.add(button3);
button1.setSelected(true); //设置默认情况下按钮1被选中
frame.add(new JLabel("Color:"));
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.pack();
frame.setVisible(true);
注意:当我们创建多个单选按钮时,如果我们不将按钮添加到按钮组中,那么多个按钮就会出现同时被选中的情况。
选项卡
选项卡也是开发GUI界面常用的控件之一,通过使用选项卡可以在 同一个窗体中提供很多不同的界面,可以通过选项卡提供的标签 在界面间方便地进行切换。选项卡是通过JTabbedPane类创建的。
选项卡可以产生多个标签框架,每一个标签框架窗口自成一个系统,即 包含多个页面,每个页面与一个标签对应。当选择某一个标签时,标签 框架窗口会自动显示出此标签框架的内容,并触发一个ChangeEvent事件 ,这个事件由ChangeListener监听器监听并处理。
选项卡具有以下构造方法及常用方法:
- public JTabbedPane()方法:该方法创建一个TabbedPane对象,该对象 具有默认的JTabbedPane.TOP选项卡布局;
- public JTabbedPane(int tabPlacement)方法:该方法使用指定的参数tabPlacement创建一个TabbedPane对象,tabPlacement参数有常值, JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT或 JTabbedPane.RIGHT;
- public JTabbedPane(int tabPlacement, int tabLayoutPolicy)方法: 该方法以指定的参数tabPlacement、tabLayoutPolicy创建一个TabbedPane对象,该对象具有指定的tabPlacement选项卡布局和tabLayoutPolicy选项卡布局策略。其中参数tabLayoutPolicy有常值, JTabbedPane.WRAP_TAB_LAYOUT、JTabbedPane.SCROLL_TAB_LAYOUT。
分割窗口
分割窗格(JSplitPane)也是Swing中常用的控件之一,其能够将单个空间分割成两个部分,并在两个部分中显示不同的内容。
JSplitPane控件允许在单个空间中放置两个控件,开发人员可以 自由决定按水平方向或垂直方向划分空间,还可以在程序运行期 间使用鼠标自由调整空间的分割比例。通过JSplitPane控件的嵌 套使用,可以将空间分割成更多的部分。JSplitPane类提供了5个构造器,如表所示。
滑块和进度条
滑块
JSlider类是Swing包中提供的用于实现滑块的控件,通过JSlider控件可以让用户在限定的范围内方便地选择需要的值。JSlider类 提供的滑块可以是水平方向的,也可以是垂直方向的,并且可以 根据需要设置成为不同的外观风格。
提示:滑块组件是由可以拖动的滑块和一个范围组件组成的;用 户可以通过拖动滑块在一个区间范围里进行选择。
进度条
ProgressBar是Swing中提供的用来实现进度条的控件,使用其可以非常方便地完 成进度条的开发。在应用中恰当使用进度条可以即时通告用户系统的一些信息,避免用户因不知道系统运行情况而焦急地等待,从而使界面更加友好。 JProgressBar类提供了5个构造器,其中有4个是比较常用的,下表列出了这4个常用的构造器。
列表框
列表是图形用户界面程序中常 用到的组件,列表允许用户从列表项中选择一个或多个选项,默认情况下,列表支持单选;选择状态由分隔符来区别。并且可以通过JList中提供的setSelectionMode方法使得列表支持多选。
JList的常用构造方法如下所示:
- public JList()方法:该方法可以构造一个使用空模型的JList对 象。
- public JList(Object[] listData)方法:该方法以显示指定数组 中的元素构造一个JList。
注意:JList类没有提供滚动功能,但是可以通过将其放置在 JScrollPane中来实现滚动操作。
下拉列表框
下拉列表及组合框,下拉列表与列表不同的是,下拉列表只支持 单个选项,只允许用户选择一个选项。优点是能节省空间,使界 面更紧凑。并且只有用户单击下拉列表时,列表选项才会显示。下拉列表框是通过JComboBox类来创建的,JComboBox控件实际上组合了一个文本框与一个下拉列表。
注意:在默认的情况下,下拉列表是不可以被用户编辑的,但是可以使用JComboBox提供的方法setEditable方法使其可以被编辑 。
菜单
菜单(JMenu)是标题栏下面的一行文字部分。菜单是应用程序中最常用的组件。菜单的组织方式为:一个菜单条JMenuBar包含多个菜单项(JMenuItem)。JMenuItem有两个子类,分别为JRadioButtonMenuItem及JCheckBoxMenuItem用于表示单选菜单项和复选菜单项。当用户选择某个菜单项后,就会触发一个ActionEvent事件,由ActionListener监听器处理。
菜单项有两种状态:启用状态和禁用状态,菜单项的状态可以使 用setEnabled()方法设置。创建完整的菜单一般需要以下几步:
- 创建菜单栏;
- 创建菜单以及子菜单;
- 创建菜单项;
- 将菜单项添加到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏。
实例代码:
JMenuBar menuBar = new JMenuBar();//创建菜单栏
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu helpMenu = new JMenu("Help");
//将菜单添加到菜单栏
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
// 为每一个菜单创建子菜单
JMenuItem fileNewMI = new JMenuItem("New");
JMenuItem fileOpenMI = new JMenuItem("Open");
JMenuItem fileSaveMI = new JMenuItem("Save");
JMenuItem fileExitMI = new JMenuItem("Exit");
// 将子菜单添加到菜单
fileMenu.add(fileNewMI);
//为菜单添加事件监听器
fileNewMI.addActionListener(actionListener);
fileMenu.add(fileOpenMI);
fileOpenMI.addActionListener(actionListener);
fileMenu.add(fileSaveMI);
fileSaveMI.addActionListener(actionListener);
fileMenu.addSeparator();
fileMenu.add(fileExitMI);
fileExitMI.addActionListener(actionListener);
JMenuItem editCopyMI = new JMenuItem("Copy");
JMenuItem editPasteMI = new JMenuItem("Paste");
editMenu.add(editCopyMI);
editMenu.add(editPasteMI);
JMenuItem helpAboutMI = new JMenuItem("About");
helpMenu.add(helpAboutMI);
运行效果:
弹出式菜单
弹出式菜单有时也称为右键菜单,其一般在用户按下鼠标右键时在鼠标位置弹出,能够给用户的操作提供更大的方便。从某种程度上来说,右键菜单设计的好坏直接影响应用程序的易用性。弹出式菜单是通过JPopupMenu类来创建,通过该类提供的show方法将菜单显示在指定的位置上。
注意:JPopupMenu类不是继承JMenu类的而是从JComponent类继承过来。弹出式菜单的创建和菜单的创建基本相同,也需要新建一个弹出式菜单后再加入菜单项。
来源:oschina
链接:https://my.oschina.net/u/2891539/blog/750127