JavaSwing JComboBox模拟html的select标签
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