组合框JcomBox由一个文本行和一个列表框组成。组合框通常的显示形式是右边带有下拉箭头的文本行,列表框是隐藏的,单击右边的下拉箭头才可以显示列表框。既可以在组合框的文本行中直接输入数据,也可以从其列表框中选择数据项,被选择的数据项会显示在文本行中。
JComBox类的常用构造方法:
JComBox(),创建一个没有选项的JComBox对象。
JComBox(Vector vect),创建一个JComBox对象,其中的选项由向量表vect决定。
JComBox(Object item[])创建一个JComBox对象,其中的选项由对象数组item决定。可以是字符串数组。
JComBox类的常用方法:
void addActionListener(ActionListener e),向JComBox对象注册ActionEvent事件监听器。
void addItemListener(ItemListener e),向JComBox对象注册ItemEvent事件监听器。
void addFocusListener(addFocusListener e),向JComBox对象注册FocusEvent事件监听器。
void setSelectedIndex(int index),设置该索引被选中。
void setSelectedItem(Object object),设置该数据项被选中。
int getSelectedIndex(),获取当前选中数据项的索引。
Object getSelectedItem(),获取当前选中的数据项。
Object getItemAt(int index),获取索引为index的数据项。
int getItemCount(),获取JComBox中数据项的总数。
JComboBox应用ItemListener和FocusListener代码示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class JComboBoxTest extends JFrame {
private JFrame jFrame = new JFrame("JComboBoxTest");
private JButton jButton=new JButton("按钮");
// 需要选择的条目
String[] listData = new String[]{"A", "B", "C", "D", "E"};
//用count记录ItemListener运行的次数
int count=0;
// 创建一个下拉列表框
public JComboBox<String> jcomboBox = new JComboBox<String>(listData);
public JComboBox<String> box = new JComboBox<String>(listData);
public JComboBoxTest() {
this.setLocationRelativeTo(null);
this.setSize(500, 500);
jcomboBox.setBounds(80, 280, 200, 40);
this.getContentPane().add(jcomboBox, BorderLayout.NORTH);
this.getContentPane().add(jButton,BorderLayout.SOUTH);
// 添加条目选中状态改变的监听器
// JComboBox默认选中的是0索引,即一开始选中的是 A
// 当我们切换选项时,假设由A切换到D,则A就是没有选中的状态,则会触发 "处理未选中的状态"
// 然后再选中D时,D被选上则会触发 "处理选中的状态"
// 注意此时ItemListener事件运行了两次
jcomboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("ItemListener运行了 " +(++count)+" 次");
// 处理未选中的状态
if (e.getStateChange() == ItemEvent.DESELECTED) {
System.out.println("取消: " + getdeselectindex(box,(String)e.getItem()) + " = " +
e.getItem());
}
// 处理选中的状态
if (e.getStateChange() == ItemEvent.SELECTED) {
System.out.println("选中: " + jcomboBox.getSelectedIndex() + " = " +
jcomboBox.getSelectedItem());
System.out.println("选中: " + getdeselectindex(box,(String)e.getItem()) + " = " +
e.getItemSelectable().getSelectedObjects()[0]);
System.out.println("选中: " + ((JComboBox)e.getSource()).getSelectedIndex() + " = " +
((JComboBox)e.getSource()).getSelectedItem());
}
}
});
jcomboBox.addFocusListener(new FocusListener() {
//当点击其他组件如按钮时就会触发jcomboc 失去了焦点
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
System.out.println("jcomboBox 失去了焦点");
}
//当点击jcombox时就会触发 jcomboBox 获得了焦点
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
System.out.println("jcomboBox 获得了焦点");
}
});
this.setVisible(true);
}
//没有返回取消的索引的方法,因此自己写了一个
public int getdeselectindex(JComboBox jComboBox, String string) {
for (int i = 0; i < jComboBox.getItemCount(); i++) {
jComboBox.setSelectedIndex(i);
if (jComboBox.getSelectedItem() == string)
return i;
}
return 0;
}
public static void main(String[] args) {
new JComboBoxTest();
}
}