JTable JComboBox和获取选定值

时间:2018-01-21 15:36:40

标签: java swing jtable jcombobox

我需要从JComboBox单元格中的JTable获取所选项目(以及其他数据,但我想通过关注单个单元格/列来简化我的问题)。组合框正在显示和工作,所以我需要的是获取所选项目。

我找不到任何能告诉我在我的代码中该怎么做的内容。所有这些例子看起来都非常复杂,我认为这是一个例行程序。我的JDialog包含表格,其中有一个保存按钮。我认为文档告诉我表的所有更改都保存在表模型中。

我是否更正我从保存按钮的监听器中的表模型中提取更改的数据?如果是这样,我不知道我怎么知道哪些细胞被改变了,除非我应该处理每个细胞而不管它。有人可以纠正/澄清我的推理吗?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码来跟踪表格更改。

public static class CellIndex {
    private final int row;
    private final int column;
    private final int type;

    private final static int ROW_ADDED=1;
    private final static int ROW_DELETED=2;
    private final static int CELL_UPDATED=3;

    public CellIndex( int row,int column,int type ){
        this.row=row;
        this.column=column;
        this.type=type;
    }

    public int getRow() {
        return row;
    }

    public int getColumn() {
        return column;
    }

    public int getType() {
        return column;
    }   

}

跟踪单元格更改的代码

    final ArrayList<CellIndex> changedCellIndex = new ArrayList<CellIndex>();
    table.getModel().addTableModelListener( new TableModelListener() {

        @Override
        public void tableChanged(TableModelEvent e) {
            int type = 0;
            switch(e.getType() ) {
                case TableModelEvent.DELETE:
                    type = CellIndex.ROW_DELETED;
                    break;

                case TableModelEvent.UPDATE:
                    type = CellIndex.CELL_UPDATED;
                    break;

                case TableModelEvent.INSERT:
                    type = CellIndex.ROW_ADDED;
                    break;
            }

            int end = e.getLastRow();
            int start = e.getFirstRow();

            if( end < 0 ) {
                end = start;
            }

            for( int i = start;i<= end;i++ ) {
                changedCellIndex.add( new CellIndex(i,e.getColumn(), type));
            }
        }
    });