Java核心(Swing 程序设计4-列表组件、文本组件、常用时间监听器)

一、列表组件

    Swing 中提供了两种列表组件,分别为下拉列表框与列表框。下拉列表框与列表框都是带有一系列项目的组件,用户可以从中选择需要的项目。列表框较下拉列表框更直观,它将所有的项目罗列在列表框中;但下拉列表框较列表框更为便捷、美观,它将所有的项目隐藏起来,当用户选用其中的项目时才会显现出来。

    1.1 下拉列表框组件

    1.1.1  JComboBox 类

    下拉列表框是一个带条状的显示区,它具有下拉功能,在下拉列表框的右方存在一个倒三角形的按钮,当用户单击该按钮时,下拉 列表框中的项目将会以列表形式显示出来。

    Swing 中的下拉列表框使用 JComboBox 类对象来表示,它是 javax.swing.JComponent 类的子类。它的常用构造方法如下 : 

    ( 1 ) :public JComboBox() 。

    ( 2 ) :public JComboBox(ComboBoxModel dataModel) 。

    ( 3 ) :public JComboBox(Objet[] arrayDate) 。

    ( 4 ) :public JComboBox(Vector vector) 。

    在初始化下拉列表框时,可以选择同时指定下拉列表框中的项目内容,也可以在程序中使用其他方法设置下拉列表框中的内容,下拉列表框中的内容可以被封装在 ComboBoxModel 类型、数组或 Vector 类型中。

    1.1.2  JComboBox 模型

    在开发过程中,一般将下拉列表框中的项目封装为 ComboBoxModel 的情况比较多。 ComboBoxModel 为接口,它代表一般模型,可以自定义一个类实现该接口,然后再初始化 JComboBox 对象时向上转型为 ComboBoxModel 接口类型,但是必须实现以下两种方法 :

    ( 1 ) :public void setSelectedIten(Object item) 。

    ( 2 ) :public Object getSelectedItem() 。

    其中,setSelectedItem() 方法用于设置下拉列表框中的选中项, getSelectedItem() 方法用于返回下拉列表框中的选中项,有了这两个方法,就可以轻松地对下拉列表框中的项目进行操作。

    自定义这个类除了实现该接口之外,还可以继承 AbstractListModel 类,在该类中也有两个操作下拉列表框的重要方法 :

    ( 1 ) : getSize()  :返回列表的长度 。

    ( 2 ) : getElementAt(int index)  :返回指定索引处的值 。

    eg 1.1.2 在项目中创建 JComboBoxModelTest 类,使该类继承 JFrame 类称为窗体组件,在类中创建下拉列表框,并添加到窗体中。

package com.SwingDemo;

import java.awt.*;
import javax.swing.*;

public class JComboBoxModelTest extends JFrame {
    private static final long serialVersionUID = 1L;
    JComboBox<String> jBox = new JComboBox<>(new MyComboBox());
    JLabel jLabel = new JLabel("请选择证件:");
    public JComboBoxModelTest() {
        setSize(new Dimension(160, 180));
        setVisible(true);
        setTitle("在窗口中设置下拉列表框");
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        Container container = getContentPane();
        container.setLayout(new FlowLayout());
        container.add(jBox);
        container.add(jLabel);
    }

    public static void main(String[] args) {
        new JComboBoxModelTest();
    }
}

class MyComboBox extends AbstractListModel<String> implements ComboBoxModel<String> {
    private static final long serialVersionUID = 1L;
    String selectedItem = null;
    String[] teStrings = { "身份证", "军人证", "学生证", "工作证" };
    @Override
    public String getElementAt(int index) {        //根据索引返回值
        return teStrings[index];
    }
    @Override
    public int getSize() {        //返回下拉列表框项目的数目
        return teStrings.length;
    }
    @Override
    public void setSelectedItem(Object anItem) {        //设置下拉列表框项目
        selectedItem = (String) selectedItem;
    }
    @Override
    public Object getSelectedItem() {        //获取下拉列表框项目
        return selectedItem;
    }
    public int getIndex() { 
        for (int i = 0; i < teStrings.length; i++) {
            if (teStrings[i].equals(getSelectedItem())) {
                return i;
            }
        }
        return 0;
    }
}
    运行结果为 :

        

    自定义了一个实现 ComboBoxModel 接口

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值