Java学习笔记之Swing(三)

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方法前调用这两个方法。

效果图:

jt1.png

单选按钮

单选按钮是一种只能在一组选项中选择其中一个选项的控件。单选按钮是通过使用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有两个子类,分别为JRadioButtonMenuItemJCheckBoxMenuItem用于表示单选菜单项和复选菜单项。当用户选择某个菜单项后,就会触发一个ActionEvent事件,由ActionListener监听器处理。

菜单项有两种状态:启用状态和禁用状态,菜单项的状态可以使 用setEnabled()方法设置。创建完整的菜单一般需要以下几步:

  1. 创建菜单栏;
  2. 创建菜单以及子菜单;
  3. 创建菜单项;
  4. 将菜单项添加到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏。

实例代码:

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);

运行效果:

jt6.png

弹出式菜单

弹出式菜单有时也称为右键菜单,其一般在用户按下鼠标右键时在鼠标位置弹出,能够给用户的操作提供更大的方便。从某种程度上来说,右键菜单设计的好坏直接影响应用程序的易用性。弹出式菜单是通过JPopupMenu类来创建,通过该类提供的show方法将菜单显示在指定的位置上。

注意:JPopupMenu类不是继承JMenu类的而是从JComponent类继承过来。弹出式菜单的创建和菜单的创建基本相同,也需要新建一个弹出式菜单后再加入菜单项。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,325评论 0 11
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,209评论 0 17
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,422评论 22 663
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,618评论 4 59
  • 最近,因为一场“不请自来”的梦,总不由得的想到高中时代里不属于我的那个少年。他没有身穿白衬衫的习惯,却依旧给人干...
    南仓阅读 490评论 0 0