Java JTable没有返回所有记录的数据

Java JTable没有返回所有记录的数据,java,swing,jtable,Java,Swing,Jtable,我正在使用JTable,并通过CTRL+a选择所有行。 我得到的选定行是正确的,但当我试图得到值时,它只给出视口中的值 我在这里添加了一部分代码 JTable _resultTable = new JTable(); JScrollPane _resultPane = new JScrollPane(); _resultTable.setModel(JUTableBindingFactory.createAttributeListBinding(_panelBinding, _resultTa

我正在使用
JTable
,并通过CTRL+a选择所有行。 我得到的选定行是正确的,但当我试图得到值时,它只给出视口中的值

我在这里添加了一部分代码

JTable _resultTable = new JTable();
JScrollPane _resultPane = new JScrollPane();

_resultTable.setModel(JUTableBindingFactory.createAttributeListBinding(_panelBinding, _resultTable , _searchViewName, _searchViewName + "Iter", _searchViewName + "IterBinding", FIELDS));
_resultPane.getViewport().add(_resultTable);
MultiSelectionListListener.setMultiSelectionModel(_resultTable);

_changeSelectedButton.addActionListener(new ActionListener()
{
  public void actionPerformed(ActionEvent e)
  {
    int[] tableRows = _resultTable.getSelectedRows();

    System.out.println(" length :" + tableRows.length);

    Row[] dataRows = new Row[tableRows.length];

    RowIterator iterator = null;
    JUIteratorBinding iterBinding = _panelBinding.getRowIterBinding(_searchViewName, _searchViewName + "Iter",_searchViewName.replace('.','_')+"IterBinding");
    iterator = iterBinding != null ? iterBinding.getNavigatableRowIterator() : null;

    for (int i = 0; i < tableRows.length; i++)
    {
      dataRows[i] = iterator.getRowAtRangeIndex(rowIndexToRangeIndex(tableRows[i], iterator));
      System.out.println(" Name :" + i + " " +dataRows[i].getAttribute(1));
    }
  }
JTable\u resultTable=newjtable();
JScrollPane _resultPane=新的JScrollPane();
_setModel(JUTableBindingFactory.createAttributeListBinding(_panelBinding,_Resultable,_searchViewName,_searchViewName+“Iter”,_searchViewName+“IterBinding”,字段));
_resultPane.getViewport().add(\u resultable);
MultiSelectionListListener.setMultiSelectionModel(_Resultable);
_changeSelectedButton.addActionListener(新ActionListener()
{
已执行的公共无效操作(操作事件e)
{
int[]tableRows=\u resultable.getSelectedRows();
System.out.println(“长度:“+tableRows.length”);
行[]数据行=新行[tableRows.length];
RowIterator迭代器=null;
JUIteratorBinding iterBinding=\u panelBinding.getRowIterBinding(\u searchViewName,\u searchViewName+“Iter”,\u searchViewName.replace('.','','')+“iterBinding”);
iterator=iterBinding!=null?iterBinding.getNavigatableRowIterator():null;
for(int i=0;i
从上面的代码片段可以看出,如果存在的记录数为50,并且我们可以看到10条记录,那么输出是:

长度:50

姓名:0纳丁

姓名:1 Nadine1

姓名:2 Nadine23

姓名:3 Nadine3

姓名:4 Nadine4

姓名:5 Nadine5

姓名:6 Nadine6

姓名:7 Nadine7

姓名:8 Nadine8

姓名:9 Nadine9

姓名:10 Nadine10

在打印10条记录之后,它在
dataRows[i].getAttribute(1)
处给出
NullPointerExpetion

这意味着它不会为不在视口中的记录拾取数据

那么解决办法是什么呢

编辑
我正在使用BC4J绑定来获取表中的数据。

您的代码片段建议了一些事情:

  • 不要混合使用模型坐标和视图坐标,请根据需要使用它们

  • 访问您的
    表格模型
    ,而不是用于构建它的数据结构


我在互联网上搜索了这个问题,找到了一个帮助我理解这个问题的答案。 未加载数据,因为绑定加载了太多需要在视口中显示的数据。因此,尝试访问不在视口中的数据时出错

为了解决这个问题,我们只需要通过稍微调整绑定来加载View对象中的所有数据


最后一个参数
-1
用于设置RangeSize(-1),它将加载所有数据。

1.resultPane!=\u resultPane,2.您的绑定工厂已损坏(找不到更好的词)3.这个问题可能与Swing、JTable无关。4.为了获得更好的帮助,请尽快发布一个SSCCE,简短、可运行、可编译,带有绑定工厂的硬编码值,作为XXXTableModel的数据源传递,可能与Model有关,但我无法在此处发布全部代码。没有人要求您在Google上发布全部代码SSCCE如果你不知道它是什么。看到你使用了一些绑定框架,最好将其添加为标签-这可能会吸引该领域的专家
 JUIteratorBinding iterBinding = _panelBinding.getRowIterBinding(_searchViewName, _searchViewName + "Iter",_searchViewName.replace('.','_')+"IterBinding");
DCIteratorBinding iterBinding = _panelBinding.getIteratorBinding(_searchViewName, _searchViewName + "Iter",_searchViewName.replace('.','_')+"IterBinding", -1);