-1

a を使用し、JTableCTRL+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));
    }
  }

上記のコード スニペットから、存在するレコード数が 50 で、10 レコードが表示される場合、出力は次のようになります。

長さ:50

名前: 0 ナディーン

名前 : 1 Nadine1

名前 : 2 Nadine23

名前 : 3 Nadine3

名前 : 4 Nadine4

名前 : 5 ナディーン5

名前 : 6 Nadine6

名前 : 7 ナディーン7

名前 : 8 ナディーン8

名前 : ナディーン9

名前 : 10 Nadine10

そして、10 レコードを出力すると、NullPointerExpetionatが得られdataRows[i].getAttribute(1)ます。

つまり、ビューポートにないレコードのデータを選択していないということです。

では、解決策は何でしょうか?

EDIT テーブル内のデータを取得するためにBC4Jバインディングを使用しています。

4

2 に答える 2