8.4.3JComboBox下拉列表
JComboBox组件也称为下拉列表框,其特点是将所有选项折叠在一起,只显示最前面的或被用户选中的一个。选择时需要单击下拉列表右边的下三角按钮,这时候会弹出包含所有选项的列表。用户可以在列表中进行选择,也可以根据需要直接输入所要的选项。也可以输入选项中没有的内容。
JcomboBox类提供了多个构造方法用于创建JcomboBox类对象,详见下表8-9。
表8-9 JComboBox构造 方法
|
构造方法 |
说明 |
|
JComboBox() |
创建一个空的JcomboBox对象,可使用addItem方法添加选项 |
|
JComboBox(ComboBoxModel aModel) |
创建一个 JComboBox,其项取自现有的 ComboBoxModel |
|
JComboBox(Object[] items) |
创建包含指定数组中的元素的 JComboBox |
|
JComboBox(Vector> items) |
创建包含指定 Vector 中的元素的 JComboBox |
我们可以利用上表给出的四个方法中的任意一个来创建JComboBox对象,在实际使用中,JComboBox()及JComboBox(Object[] items)方式可能会更常用。
JComboBox类提供了多个成员方法用于操作下拉列表框中的项。详见下表8-10。
表8-10 JComboBox类的常用方法
|
成员方法 |
说明 |
|
void addItem(Object anObject) |
将指定的对象作为项添加到下拉列表框中 |
void insertItemAt |
在下拉列表框中的给定索引处插入项 |
|
void removeItem(Object anObject) |
在下拉列表框中删除指定的对象项 |
|
void removeItemAt(int anIndex) |
在下拉列表框中删除指定位置的对象项 |
|
void removeAllItems() |
从下拉列表框中删除所有项 |
|
int getItemCount() |
返回下拉列表框中的项数 |
|
Object getItemAt(int index) |
获取指定下标的列表项,下标从0开始 |
|
int getSelectedIndex() |
获取当前选择的下标 |
|
Object getSelectedItem() |
获取当前选择的项 |
JComboBox能够响应两个事件,分别为ItemEvent和ActionEvent,要处理这两个事件,需要创建相应的类实现ItemListener 和ActionListener接口。ItemEvent触发的时机是当下拉列表框中的所选项更改时,ActionEvent触发的时机是当用户在JComboBox上直接输入选择项并回车时。
例8-6演示了如何在程序中为JComboBox添加项,如何删除项以及选中JComboBox中的某项后的事件处理。
[例8-6]
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class JComboBoxTest extends JFrame{
private JComboBox cmb = new JComboBox();
private JLabel label = new JLabel("要添加项的值:");
private JTextField tf = new JTextField(5);
private JButton buttonAdd = new JButton("添加");
private JButton buttonDel = new JButton("删除");
private JTextArea ta = new JTextArea(4,8);
private JPanel panelNorth = new JPanel();
public JComboBoxTest(String title){
super(title);
Container contentPane = this.getContentPane();
panelNorth.add(cmb);
panelNorth.add(label);
panelNorth.add(tf);
panelNorth.add(buttonAdd);
panelNorth.add(buttonDel);
contentPane.add(panelNorth,BorderLayout.NORTH);
contentPane.add(ta,BorderLayout.CENTER);
buttonAdd.addActionListener(new MyActionListener());
buttonDel.addActionListener(new MyActionListener());
cmb.addItemListener(new MyItemListener());
pack();
setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//监听"添加"和"删除"按钮
private class MyActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
//添加按钮处理
if(command.equals("添加")){
if(tf.getText().length()!=0){
cmb.addItem(tf.getText());//添加项
ta.setText("添加成功,添加项:"+tf.getText());
pack();//自动调整窗口大小
}
else{
ta.setText("请输入要添加的项");
}
}
//删除按钮处理
if(command.equals("删除")){
if(cmb.getSelectedIndex()!=-1){
//先获得要删除的项的值
String strDel = cmb.getSelectedItem().toString();
cmb.removeItem(strDel);//删除项
ta.setText("删除成功,删除项:"+strDel);
pack();//自动调整窗口大小
}
else{
ta.setText("请选择要删除的项");
}
}
}
}
private class MyItemListener implements ItemListener{
public void itemStateChanged(ItemEvent e) {
String str = e.getItem().toString();
ta.setText("您选择了项:"+str);
}
}
}
public class Test8_6 {
public static void main(String[] args) {
new JComboBoxTest("JComboBox测试");
}
} [NextPage]
针对不同情况,给出了程序的三个运行结果,见图8-7

图8-7 例8-6三种不同情况下的运行结果
在添加及删除成功后的代码中,两次使用了“pack()”语句,其作用是,当添加或删除成功后,其JComboBox的宽度可能会有所改变,为了不影响其他组件的显示效果,需要使用“pack()”语句使窗体重新调整大小以适应所有组件的显示。
8.4.4 JList列表框
JList又叫列表框,它和下拉列表有许多不同之处。JList在界面上占据固定行数,既支持单项选择,也支持多项选择(连续区间选择需按住Shift键选择,不连续区间选择需 按住Ctrl键选择)。而JComboBox一次则只能选择一项。
JList提供了多个构造方法用于 创建JList类对象,详见下表8-11。
表8-11 JList构造方法
|
构造方法 |
说明 |
|
JList() |
构造一个空的JList对象 |
|
JList(ListModel dataModel) |
使用dataModel模式构造一个JList对象 |
|
JList(Object[] listData) |
使用listData数组构造一个JList对象 |
|
JList(Vector> listData) |
使用listData向量数组构造一个JList对象 |
与JComboBox不同,JList类没有提供任何添加、插入和删除项的方法,在完成JList的构造后,唯一可以修改数据的方法时setListDate(),这个方法可以一次指定所有的项。
JList类中常用的成员方法如下表8-12。
表8-12 JList常用成员方法
|
成员方法 |
说明 |
|
int getSelectedIndex() |
获取所有选项最小下标 |
|
int[] getSelectedIndices() |
获取所有选项的下标(按升序排列) |
|
void setSelectionMode(int selectionMode) |
设置列表的选择模,selectionMode值见说明 |
|
void setVisibleRowCount(int visibleRowCount) |
设置列表的可见行数 |
说明:selectionMode的值有以下可选值。
(1)ListSelectionModel.SINGLE_SELECTION :一次只能选择一个列表索引。
(2)ListSelectionModel.SINGLE_INTERVAL_SELECTION: 只允许选择连续范围内的多个项,可通过按住Shift键的方式选择。
(3)ListSelectionModel.MULTIPLE_INTERVAL_SELECTION: 列表框的默认模式,既可选择连续范围内的多个项,也可选择不连续的多个项。
JList从够响应两个事件:ListSeletionEvent和MouseEvent,,要处理这两个事件,需要创建相应的类实现ListSeletionListener 和MouseListener接口(或是继承MouseAdapter)。ListSeletionEvent触发的时机是当用户单击列表框中的某一个选项并选中它时,MouseEvent触发的时机是当用户双击列表框中的某个选项时。
JList本身是不带滚动条的,如果将JList放到JScrollPane(滚动面板)中,则会是JList带有滚动条效果。
例8-7演示了JList的创建、显示及对ListSeletionEvent事件的处理情况。
[例8-7]
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
class JListTest extends JFrame{
private JList list = new JList();
private JTextArea ta = new JTextArea(6,8);
public JListTest(String title){
super(title);
String[] citys =
{"北京","天津","上海","广州","深圳","南京","重庆","沈阳","西安"};
list.setListData(citys);
Container contentPane = this.getContentPane();
contentPane.setLayout(new FlowLayout(5));//在界面上显示5行
list.setVisibleRowCount(5);
contentPane.add(new JScrollPane(list));//使JList带有滚动条
contentPane.add(ta);
//注册监听器
list.addListSelectionListener(new MyListSelectionListener());
pack();//重新调整
setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//处理ListSelection事件
private class MyListSelectionListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent arg0) {
StringBuffer selectedCitys = new StringBuffer();
Object[] selectedItems = list.getSelectedValues();
for(int i=0;i }
ta.setText(selectedCitys.toString());
pack();
}
}
}
public class Test8_7 {
public static void main(String[] args) {
new JListTest("JList测试");
}
}
运行结果如图8-8所示
图8-8 例8-7运行结果 程序中对ListSeletionEvent做了处理,对于另一个事件MouseEvent,因为其有多个抽象方法,因此建议使用 继承MouseAdapter的方式去处理。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|