说明:
1、枚举定义下拉框数据源
2、通过自定义控件做绑定
3、通过封装的方法去实现取值和赋值
参考代码:
枚举定义下拉框数据源
package com.zx.app.enums.common;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 字符编码类型枚举
*
* @author SH.YE
*/
@AllArgsConstructor
@Getter
public enum EnCodeActionEnum {
ALL("all", "全文"),
LINE("line", "逐行"),
FULL_TEXT("full-text", "全文关键词"),
;
private final String code;
private final String name;
public static EnCodeActionEnum getItem(String data) {
return getItem(data, ALL);
}
public static EnCodeActionEnum getItem(String data, EnCodeActionEnum defaultValue) {
if (data == null) {
return defaultValue;
}
for (EnCodeActionEnum each : EnCodeActionEnum.values()) {
if (data.equalsIgnoreCase(each.getCode())) {
return each;
}
}
return defaultValue;
}
public static String[] toArray() {
int len = EnCodeActionEnum.values().length;
String[] result = new String[len];
int idx = -1;
for (EnCodeActionEnum each : EnCodeActionEnum.values()) {
++idx;
result[idx] = each.getCode();
}
return result;
}
public static JSONArray toJsonArray() {
JSONArray result = new JSONArray();
JSONObject item = null;
for (EnCodeActionEnum each : EnCodeActionEnum.values()) {
item = new JSONObject();
item.put(ColumnNameEnum.ID.getCode(), each.getCode());
item.put(ColumnNameEnum.NAME.getCode(), each.getName());
result.add(item);
}
return result;
}
}
定义ComboBoxItem类
package com.zx.app.item.ctrl;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ComboBoxItem {
private String id;
private String name;
private Object tag;
@Override
public String toString() {
return name;
}
public static final String DEFAULT_ID = "0";
public static ComboBoxItem defaultItem() {
return new ComboBoxItem(DEFAULT_ID, "默认", null);
}
}
主程序相关的定义和绑定
// 定义
private JComboBox<ComboBoxItem> cbOperation = null;
// 绑定
JPanel cbPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
cbPanel.add(new JLabel("操作选项:"));
cbOperation = new JComboBox<>(ControlZxUtil.jsonArrayToComboBoxItemArray(EnCodeActionEnum.toJsonArray()));
cbOperation.setPreferredSize(new Dimension(120, 25));
cbPanel.add(cbOperation);
addRow(contentPanel, gbc, "", cbPanel, gridY++);
// 取值
EnCodeActionEnum enCodeActionEnumA = EnCodeActionEnum.getItem(ControlZxUtil.getComboBoxItemValue(cbOperation));
ControlZxUtil工具类
package com.zx.app.util.control;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zx.app.enums.common.CharsetEnum;
import com.zx.app.enums.common.ColumnNameEnum;
import com.zx.app.item.ctrl.ComboBoxItem;
import javax.swing.*;
import java.nio.charset.Charset;
public class ControlZxUtil {
public static String comboBoxGetSelectedItem(JComboBox<String> cb, String defaultValue) {
Object item = cb.getSelectedItem();
if (item == null) {
return defaultValue;
}
return item.toString();
}
public static ComboBoxItem getComboBoxItem(JComboBox<ComboBoxItem> cb) {
int idx = cb.getSelectedIndex();
if (idx == -1) {
return null;
}
return cb.getItemAt(idx);
}
public static String getComboBoxItemValue(JComboBox<ComboBoxItem> cb) {
int idx = cb.getSelectedIndex();
if (idx == -1) {
return null;
}
return cb.getItemAt(idx).getId();
}
/**
* 根据ID值设置下拉框的选中项
*
* @param cb 目标下拉框组件
* @param value 要选中的项的ID值
*/
public static boolean setComboBoxItemValue(JComboBox<ComboBoxItem> cb, String value) {
// 空值处理:不选中任何项
if (value == null) {
cb.setSelectedIndex(-1);
return false;
}
// 遍历下拉框所有项,找到ID匹配的项并选中
for (int i = 0; i < cb.getItemCount(); ++i) {
ComboBoxItem item = cb.getItemAt(i);
if (item != null && value.equals(item.getId())) {
cb.setSelectedIndex(i);
return true;
}
}
// 未找到匹配项时,默认不选中任何项
cb.setSelectedIndex(-1);
return false;
}
public static Charset charsetGet(String encoding) {
if (encoding == null || encoding.trim().isEmpty()) {
return Charset.defaultCharset();
}
return Charset.forName(encoding);
}
public static Charset charsetGetByEnum(CharsetEnum em) {
switch (em) {
case DEFAULT:
return Charset.defaultCharset();
case UTF_8:
default:
return Charset.forName(em.getCode());
}
}
public static Charset charsetGetByCtrl(JComboBox<ComboBoxItem> cb) {
return charsetGetByCtrl(cb, Charset.defaultCharset());
}
public static Charset charsetGetByCtrl(JComboBox<ComboBoxItem> cb, Charset defaultValue) {
String value = getComboBoxItemValue(cb);
if (value == null || value.isEmpty()) {
return defaultValue;
}
CharsetEnum charsetEnumV = CharsetEnum.getItem(value, CharsetEnum.DEFAULT);
return charsetGetByEnum(charsetEnumV);
}
public static ComboBoxItem[] jsonArrayToComboBoxItemArray(JSONArray array) {
int iLen = array.size();
ComboBoxItem[] comboBoxItemList = new ComboBoxItem[iLen + 1];
ComboBoxItem comboBoxItemV = null;
JSONObject item = null;
for (int i = 0; i < iLen; ++i) {
item = array.getJSONObject(i);
comboBoxItemV = new ComboBoxItem(item.getString(ColumnNameEnum.ID.getCode()), item.getString(ColumnNameEnum.NAME.getCode()), null);
comboBoxItemList[i] = comboBoxItemV;
}
return comboBoxItemList;
}
}