ListSelectionModelの独自の実装を作成しようとしていますが、現在insertIndexInterval
を実装しようとしているうちに固執しています。 Sunの/ OracleのDefautListSelectionModel
の実装では、この方法の結果はわかりません。次に例を示します。ListSelectionModel.insertIndexInterval()は何をしていますか?
ListSelectionModel model = new DefaultListSelectionModel();
model.setSelectionInterval(3, 5);
model.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
System.out.println("Changed range reported by event: " +
e.getFirstIndex() + "-" + e.getLastIndex());
}
});
System.out.print("Selected indices before insert: ");
for (int i = model.getMinSelectionIndex(); i <= model.getMaxSelectionIndex(); i++)
if (model.isSelectedIndex(i)) System.out.print(i + " ");
System.out.println();
model.insertIndexInterval(3, 3, true);
System.out.print("Selected indices after insert: ");
for (int i = model.getMinSelectionIndex(); i <= model.getMaxSelectionIndex(); i++)
if (model.isSelectedIndex(i)) System.out.print(i + " ");
System.out.println();
あなたはこのコードを実行するときは、この出力を取得します:
Selected indices before insert: 3 4 5
Changed range reported by event: 3-8
Selected indices after insert: 3 4 5 6 7 8
だから、最初の選択は3-5だったし、新しいインデックスを挿入するとき、それは3-8に拡張されました。しかし、3-5はすでに選択されているので、実際の変更は6-8にすぎないので、3から8の範囲が変更されたというイベントがどうして私に伝えられるのですか?私は報告の変化が5-8である理由はわかりません
Selected indices before insert: 3 4 5
Changed range reported by event: 5-8
Selected indices after insert: 3 4 5 6 7 8
:
model.insertIndexInterval(3, 3, false);
今、出力はこれです:あなたはこれにinsertIndexInterval
呼び出しに変更する場合にはさらに混乱です。
このメソッドのAPIドキュメントは、あまりにも短いので、そこで何が起こっているのか理解できません。特にこのbefore
パラメータは、選択に何の影響も与えないので、私にとっては不思議ですが、イベントやリードとアンカーのインデックスに何らかの影響を与えるようです。
予想される結果がわからないため、私の実装の単体テストも書けません。
誰かがこの方法(特にbefore
フラグ)が何をしているのか、それが選択モデルとListSelectionEvent
にどのような副作用があるのかを詳しく説明できますか?私たちはJListの程度ではなく、JTableのについて話していることを願ってい
はい、私はゼロが本当にそこにないことを知っています。そのように比較するほうが簡単です。しかし、私はまだそれを取得しません。このイベントは、データモデルではなく選択モデルにバインドされています。指標3-5は、新しいデータを挿入する前にすでに選択されていたため、実際の変更(データモデルではなく選択モデルに対する)が6-8の追加選択範囲のみでした。しかし、報告された変化は3-8(前に=真)と5-8(前に=偽)です。特にこの5-8は今のところ意味がありません。 – kayahr
はい、それは3-8(1が移動され、2が追加されたため)について説明しますが、before = falseを使用すると報告された5-8範囲についてはどう説明しますか? 3状態として視覚化する場合、3つの1は動かず、3つの2は5ではなく、インデックス6に挿入されるので、6-8でなければなりません。 – kayahr
BTW:インデックス3の後に挿入すると0001222110になります。 0001112220ではありませんか?ドキュメントには、「インデックスの前後に開始する長さインデックスを挿入する」と書かれています。 – kayahr