北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

Java的Swing开发桌面客户端下拉框的代码笔记

说明:

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;
    }

}



控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言