首页
学习
活动
专区
工具
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

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

相关·内容

领券