リスト項目の表示位置の移動
広告
次に指定した項目を見える位置に表示する方法についてです。項目名で選択した場合は自動的に見える位置までリストをスクロールする機能がありましたが、Indexで選択した場合はそのような機能がありませんでした。
JListクラスで用意されている"ensureIndexIsVisible"メソッドを使うことで、指定したIndex番号の項目を表示されるように自動的にスクロールさせることができます。
public void ensureIndexIsVisible(int index)
ビューポートをスクロールし、指定されたセルを完全に可視にします。このメ ソッドを有効にするには、JViewport 内で JList を表示する必要があります。 パラメータ: index - 可視にするセルのインデックス
選択の際にだけ使うものではないですが、見えない位置にある項目を表示される位置まで自動でスクロールしたい場合に利用します。
ではこれも簡単なサンプルで試してみましょう。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class JListSample extends JFrame implements ActionListener{
protected JList list;
protected JTextField selectText;
public static void main(String[] args){
JListSample test = new JListSample("JListSample");
/* 終了処理を変更 */
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setBounds( 10, 10, 250, 180);
test.setVisible(true);
}
JListSample(String title){
setTitle(title);
/* JListの初期データ */
String[] initData = {"Blue", "Green", "Red", "Whit", "Black"};
list = new JList(initData);
JScrollPane sp = new JScrollPane();
sp.getViewport().setView(list);
sp.setPreferredSize(new Dimension(200, 80));
JPanel p = new JPanel();
p.add(sp);
getContentPane().add(p, BorderLayout.CENTER);
selectText = new JTextField(2);
JButton selectButton = new JButton("selectButton");
selectButton.addActionListener(this);
selectButton.setActionCommand("selectButton");
JPanel p2 = new JPanel();
p2.add(selectText);
p2.add(selectButton);
getContentPane().add(p2, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
String actionCommand = e.getActionCommand();
int select = Integer.parseInt(selectText.getText().toString());
if (actionCommand.equals("selectButton")){
list.setSelectedIndex(select);
list.ensureIndexIsVisible(select);
}else{
return;
}
}
}
実行結果は下記のようになります。
今度は見えない位置にある項目を選択した場合でも、見える位置まで自動的にスクロールしてくれます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。