JavaSwing JComboBox模拟html的select标签

yzmm
1361 阅读
JComboBox默认不支持name属性设置,getSelectedItem()默认返回的是String。实际上可以模仿原生的DefaultComboBoxModel实现一个自己的DefaultComboBoxModel。

DefaultComboBoxModel.java

package org.javaweb.swing.ui;
import java.util.Vector;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
/**
 * 实现默认ComboBoxModel
 *
 * @author yz
 */
public class DefaultComboBoxModel extends AbstractListModel implements ComboBoxModel {
    private Object selectedItem;
    Vector<JComboBoxItem> objects;
    public DefaultComboBoxModel(Vector<JComboBoxItem> objects) {
        this.objects = objects;
    }
    @Override
    public Object getSelectedItem() {
        if (selectedItem != null) {
            return selectedItem;
        } else {
            return objects.get(0).getValue();
        }
    }
    @Override
    public void setSelectedItem(Object newValue) {
        selectedItem = newValue;
    }
    @Override
    public int getSize() {
        return objects.size();
    }
    @Override
    public Object getElementAt(int i) {
        return objects.get(i);
    }
}

封装好了model对象,现在需要的是JComboBox的选中对象Item。我的想法是自己封装一个JComboBoxItem这样选中的时候返回JComboBoxItem对象。当DefaultComboBoxModel调用getSelectedItem的时候返回我们自己的JComboBox,再重写toString方法,这样可以按照自己的意愿只输出JComboBox的value。

JComboBoxItem.java

package org.javaweb.swing.ui;
/**
 * JComboBox选择项,JComboBox选中时getSelectedItem默认实现返回的只是字符串 JComboBoxItem
 * 类可以提供key、value. 模拟HTML的select标签
 *
 * @author yz
 */
public class JComboBoxItem {
    private String key;
    private String value;
    public JComboBoxItem(String key, String value) {
        this.key = key;
        this.value = value;
    }
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return this.getValue();
    }
}

调用部分代码:

List<Type> typeList = typeDAO.getTypeByParentId(0);
        Vector<JComboBoxItem> ls = new Vector<JComboBoxItem>();
        for(Type t:typeList){
            ls.add(new JComboBoxItem(String.valueOf(t.getId()),t.getTypeName()));
        }
        jComboBox1 = new JComboBox(new DefaultComboBoxModel(ls));

点击事件后获取key value:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JComboBoxItem item = (JComboBoxItem) jComboBox1.getSelectedItem();
        System.err.println(item.getKey() + ":" + item.getValue());
    }

输出:10:New

评论 (1)

汤青松
哈哈哈啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊反反复复反反复复

发表评论