首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableModel convertRowIndex

TableModel convertRowIndex
EN

Stack Overflow用户
提问于 2013-02-27 08:23:02
回答 2查看 509关注 0票数 1

我找到了类似的主题,并阅读了以下内容:Java: Selected rows's index does not changes when sorted

How to Keep Track of row index when JTable has been sorted by the user?

我使用三个相互关联的表

KUNDE.KUNDENNUMMER = VORGANG.KUNDENNUMMER VORGANG.ID = VORGANG_AUGENPAAR.VORGANG_ID

首先,我在"masterTable“中选择我的客户,然后"detailTable”显示从VORGANG到这个customer = OK的所有行。(masterTable = list,detailTable = vorgangList)现在,我的subTable显示了从VORGANG_AUGENPAAR到这个VORGANG = OK的所有行

但是,如果我想在subTable中插入一个新行,那么我就有了一个逻辑问题。对于插入,有必要从表“VORGANG.ID”中获得正确的detailTable。在我的detailTable中,VORGANG.ID以正确的方式打印出来。

通过下面的代码,我得到了正确的ID:

代码语言:javascript
复制
    int selectedRowIndex = detailTable.getSelectedRow();
    int selectedColumnIndex = 2;
    //get the correct ID:
    int selectedObject = (int) detailTable.getModel().getValueAt(selectedRowIndex, selectedColumnIndex);
    System.out.println( selectedObject + "_correct ID Number" );

然后我得到了这样的结果:"700_correct ID编号“

在下一步中,我尝试将detailTable索引行转换为正确的"vorgangList“模型。但有些地方出了问题:

代码语言:javascript
复制
    //this is wrong
    opticanuova.task.Vorgang vor  = vorgangList.get( detailTable.convertRowIndexToModel(selectedRowIndex));
    System.out.println( vor + "_wrong value" );

通过上面的代码,我得到了这样的结果:"opticanuova.Vorgang id=450 _wrong value“

我把detailTable索引转换成vorgangList索引是错误的。所以请给我你的建议。我还尝试了以下测试索引编号的代码:

代码语言:javascript
复制
            //testing vor index value
    int test2 = (int) detailTable.convertRowIndexToView(selectedRowIndex);
    System.out.println( test2 + "IndexConverted_ToView_test2" );
    int convertedRowAtPoint = detailTable.convertRowIndexToModel(selectedRowIndex);
    System.out.println( convertedRowAtPoint + "IndexConverted_ToModel: false mapped Row" );

但我总是得到detailTable的索引数,而不是vorgangList的索引数。

更详细的例子:我试图做的答案。现在是我的代码:

代码语言:javascript
复制
    //this sequence get the correct ID:
    int selectedRowIndexInView = detailTable.getSelectedRow();
    int selectedRowIndexInModel = detailTable.convertRowIndexToModel(selectedRowIndexInView);    
    int idColumnIndex = 2;
    int selectedObject = (int) detailTable.getModel().getValueAt(selectedRowIndexInModel, idColumnIndex);
    //this is wrong
    opticanuova.task.Vorgang match  = vorgangList.get(detailTable.convertRowIndexToModel(selectedRowIndexInModel));
    //print out:
    System.out.println( selectedRowIndexInView  + " = selectedRowIndexInView " );
    System.out.println( selectedRowIndexInModel  + " = selectedRowIndexInModel " );
    System.out.println( selectedObject + " = selectedObject" );
    System.out.println( vorgangList + " = vorgangLIst" );
    System.out.println( match + " = match" );

这就是结果:

代码语言:javascript
复制
1 = selectedRowIndexInView 
1 = selectedRowIndexInModel 
700 = selectedObject
[opticanuova.Vorgang[ id=400 ], opticanuova.Vorgang[ id=450 ], opticanuova.Vorgang[ id=550 ], opticanuova.Vorgang[ id=600 ], opticanuova.Vorgang[ id=650 ], opticanuova.Vorgang[ id=700 ]] = vorgangLIst
opticanuova.Vorgang[ id=450 ] = match

你看,我已经出了点问题。我需要在"match“变量中存储在"selectedObject”中的值与存储在“id=700”中的值相同(700应该是id=700而不是id=450)。所以请给我进一步的帮助。诚挚的问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-05 07:53:18

现在我已经找到了解决问题的正确办法。有必要做一个循环抛出我的vorgangList来比较所选的值(ID),并找到正确的索引号。

//find selected value

int selectedObject = (int) detailTable.getModel().getValueAt(selectedRowIndexInModel, idColumnIndex);

//find ID:

for(int i = 0; i < vorgangList.size(); i++) {

Vorgang vorgangs = vorgangList.get(i);

if (vorgangs.getId().equals(selectedObject) == true) {

System.out.println(vorgangs.getId() + " getId " + vorgangList.get(i)); }

谢谢你的努力

票数 0
EN

Stack Overflow用户

发布于 2013-02-27 09:09:39

JTable.getSelectedRow()返回选定行的视图索引。这意味着,如果对表进行排序,然后选择表中显示的第一行,则会得到0。但是,由于对表进行了排序,此索引不是模型中选定行的索引。要获得模型中相应的行,必须调用JTable.convertRowIndexToModel()

因此,获取在详细表中选择的对象的ID的正确顺序是:

代码语言:javascript
复制
int selectedRowIndexInView = detailTable.getSelectedRow();
int selectedRowIndexInModel = detailTable.convertRowIndexToModel();
int idColumnIndex = 2;
int selectedObject = 
    (int) detailTable.getModel().getValueAt(selectedRowIndexInModel, 
                                            idColumnIndex);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15107230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档