100以上の曲のタブのアルファベット順のリストをロードするスクロールペイン付きのリストボックスがあります。曲までスクロールするか、フルネームを入力して、リストで探しているものを見つけることができます。
私が追加しようとしているのは、最初の文字を入力してからインデックスをそのアイテムに移動するだけで、この長いリストから曲を簡単に見つける方法です。私は以下のコードでこれを達成しましたが、文字「r」(例として)を持つ最初のアイテムが識別され、選択されてから、ペインに表示されるように強制されますが、私がしたいのはそれを選択することですアイテムがリストの一番上に移動し、それに沿って次のアイテムをドラッグします。
searchByLetter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
char c;
String s = (letterField.getText().toUpperCase());
if(s != null) {
c = s.charAt(0);
// the line below sends the typed letter to the method listed & returns where in the
// list the first item with the identified letter is, then the following lines
// 'select it' and make it visible in the pane
indexNumber = GetSongList.getListIndexNumber(c);
}
letterField.setText(null);
list.setSelectedIndex(indexNumber);
list.ensureIndexIsVisible(indexNumber);
// what I need now is a way to move this selected item to the top of the list dragging
// the next items in the list after it
}
選択したアイテムをリストの一番上に移動させたいのですが
モデルのデータを実際に変更することはありません。代わりに、スクロールペインでビューポートの位置を変更します。
Point p = list.indexToLoction( indexNumber );
scrollPane.getViewport.setViewPosition( p );
または、別のオプションは、リスト内のアイテムを実際にフィルタリングすることです。とJTable
一緒に単一の列を使用することでこれを行うことができますJTextField
。実用的な例については、Swingチュートリアルの並べ替えとフィルタリングに関するセクションをお読みください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加