首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JTable中的JComboBox不保存选择

是指在使用JComboBox作为JTable的单元格编辑器时,当用户选择一个选项后,JComboBox无法保存用户的选择。

JTable是Swing库中的一个组件,用于显示和编辑表格数据。JComboBox是Swing库中的另一个组件,用于提供下拉选择框。在JTable中使用JComboBox作为单元格编辑器,可以让用户通过下拉选择框来编辑表格中的数据。

然而,JTable中的JComboBox默认不会保存用户的选择。这是因为JTable的数据模型是基于TableModel接口实现的,而TableModel接口只负责保存表格数据,不负责保存编辑器的状态。

要解决这个问题,可以通过自定义TableCellEditor来保存JComboBox的选择。具体步骤如下:

  1. 创建一个继承自DefaultCellEditor的自定义TableCellEditor类。
  2. 在自定义TableCellEditor类的构造函数中,传入一个JComboBox作为编辑器组件。
  3. 重写getCellEditorValue()方法,该方法在用户完成编辑时被调用,用于获取用户的选择并返回。
  4. 在JTable中使用自定义的TableCellEditor作为JComboBox的单元格编辑器。

以下是一个示例代码:

代码语言:txt
复制
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

public class JComboBoxInJTableExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JComboBox in JTable Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建表格数据模型
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Name");
        model.addColumn("Gender");
        model.addRow(new Object[]{"John", "Male"});
        model.addRow(new Object[]{"Jane", "Female"});

        // 创建JTable并设置数据模型
        JTable table = new JTable(model);

        // 创建JComboBox作为单元格编辑器
        JComboBox<String> comboBox = new JComboBox<>();
        comboBox.addItem("Male");
        comboBox.addItem("Female");

        // 创建自定义的TableCellEditor
        TableCellEditor cellEditor = new DefaultCellEditor(comboBox);

        // 设置JTable的单元格编辑器
        table.getColumnModel().getColumn(1).setCellEditor(cellEditor);

        // 将JTable放入滚动窗格中,并将滚动窗格添加到窗口中
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane);

        frame.pack();
        frame.setVisible(true);
    }
}

在上述示例中,我们创建了一个包含两列的JTable,并使用JComboBox作为第二列的单元格编辑器。用户可以通过下拉选择框来编辑第二列的数据。当用户完成编辑时,JComboBox会保存用户的选择,并将选择的值作为getCellEditorValue()方法的返回值。

这样,我们就解决了JTable中的JComboBox不保存选择的问题。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。腾讯云云服务器提供可扩展的计算能力,适用于各种规模的应用程序和工作负载。腾讯云数据库提供高性能、可扩展的数据库服务,支持多种数据库引擎和存储引擎。

腾讯云云服务器产品介绍链接:https://cloud.tencent.com/product/cvm 腾讯云数据库产品介绍链接:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • jTable插件辅助资料

    ==============================================jTable插件================================================ 【】引入jtable <link rel="stylesheet" type="text/css" href="../jtable/themes/lightcolor/blue/jtable.min.css" /> <script type="text/javascript" src="../jtable/jquery.jtable.min.js"></script> <script type="text/javascript" src="../jtable/localization/jquery.jtable.zh-CN.js"></script> 注:jTable插件需要jquery UI插件。之前要引入jQuery和jQueryUI 【】Servlet生成JSON结果 collegeList=collegeBusiness.getListByAll(); //定义数据返回JSON map Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("Result", "OK"); jsonMap.put("Records", collegeList); JSONObject result=JSONObject.fromObject(jsonMap); HttpServletResponse response=ServletActionContext.getResponse(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter out=response.getWriter(); out.println(result.toString()); out.flush(); out.close(); 【】jtable要求的返回格式 {  "Result":"OK",  "Records":[   {"PersonId":1,"Name":"Benjamin Button","Age":17,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":2,"Name":"Douglas Adams","Age":42,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":3,"Name":"Isaac Asimov","Age":26,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":4,"Name":"Thomas More","Age":65,"RecordDate":"\/Date(1320259705710)\/"}  ] } 【】当出现异常后的jTable要求的结果 {    "Result":"ERROR",    "Message":"异常信息字符串" } 【】jTable的语法  $('#MyTableContainer').jtable({             //General options comes here             actions: {                 //Action definitions comes here             },             fields: {                 //Field definitions comes here             }             //Event handlers... });      【】jtable初始化 1.定义jTable显示的区域div

    2.在JS中初始化jTable //定义部门表格 $('div#departmentmaincontent').jtable({            title: '部门列表',            selecting: true, //Enable selecting            multiselect: false, //not Allow mu

    04
    领券