首页 > Java > java教程 > 如何在 ItemEvent 之后获取 JTable 中 JComboBox 的行号?

如何在 ItemEvent 之后获取 JTable 中 JComboBox 的行号?

DDD
发布: 2024-12-13 22:47:11
原创
859 人浏览过

How to Get the Row Number of a JComboBox in a JTable After an ItemEvent?

当 ItemEvent 发生时,如何获取 JTable 中 JComboBox 的 CellRow?

您有一个 JTable,其列包含JComboBox 和附加到 JComboBox 的 ItemListener 以响应更改。但是,ItemListener 缺乏检索修改后的 ComboBox 行的能力。要在 ComboBox 更改时对同一行中的另一列进行操作,您需要行号。

理解问题

在给定的代码示例中,当更改在 ComboBox 中检测到该项目时,ComboBoxListener 会检索受影响的项目。但是,它没有提供访问 JTable 中相应行的方法。

检索 CellRow 的解决方案

当您使用组合框作为编辑器时,TableCellEditor getTableCellEditorComponent() 方法提供行作为参数。参考答案中链接的相关示例,您可以将 CellRow 检索为:

public void itemStateChanged(ItemEvent e) {
    // Get the table cell editor
    TableCellEditor editor = table.getCellEditor();
    // Get the row of the cell being edited
    int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...));
    //...
}
登录后复制

保持列同步

要保持依赖列之间的同步,您可以覆盖模型的 getValueAt() 方法根据同一行中的相关值动态更新值。例如,您可以在引发更新事件之前更新模型的 setValueAt() 方法中“其他列”的值。

示例实现

以下代码演示了这些解决方案:

import javax.swing.table.DefaultTableModel;

//...

// Override getValueAt() to keep columns synchronized
@Override
public Object getValueAt(int row, int col) {
    if (col == DEPENDENT_COL) {
        return "C2:" + this.getValueAt(row, ITEM_COL);
    } else {
        return super.getValueAt(row, col);
    }
}

//...

// Attach a new ItemListener
combo.addItemListener(new ItemListener() {

    @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            // Get the table cell editor
            TableCellEditor editor = table.getCellEditor();
            // Get the row and update the other column
            int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...));
            model.setValueAt("C2:" + e.getItem(), row, DEPENDENT_COL);
        }
    }
});
登录后复制

此解决方案结合了两种方法来同步依赖列并检索细胞行。

以上是如何在 ItemEvent 之后获取 JTable 中 JComboBox 的行号?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板