a を使用し、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));
}
}
上記のコード スニペットから、存在するレコード数が 50 で、10 レコードが表示される場合、出力は次のようになります。
長さ:50
名前: 0 ナディーン
名前 : 1 Nadine1
名前 : 2 Nadine23
名前 : 3 Nadine3
名前 : 4 Nadine4
名前 : 5 ナディーン5
名前 : 6 Nadine6
名前 : 7 ナディーン7
名前 : 8 ナディーン8
名前 : ナディーン9
名前 : 10 Nadine10
そして、10 レコードを出力すると、NullPointerExpetion
atが得られdataRows[i].getAttribute(1)
ます。
つまり、ビューポートにないレコードのデータを選択していないということです。
では、解決策は何でしょうか?
EDIT テーブル内のデータを取得するためにBC4Jバインディングを使用しています。