プロが教えるわが家の防犯対策術!

ListSelectionListenerをセットした
JListのアイテムを選択した時に呼び出されるvalue
Changedメソッドが1回選択したときに2回呼び出さ
れてしまいます。これはこういった仕様なのでしょう
か?2回の呼び出しがどのようなタイミングで呼びだ
されるのでしょうか、1回だけ呼び出されるようにす
るにはどのようにすればよいのでしょうか?ご存知の
方、お願いします

実行環境
Windows2000
J2SDK 1.4.1

****************以下問題起こるのソースコード***********
import javax.swing.*;
import javax.swing.event.*;

public class ListTest implements ListSelectionListener {
public static void main(String[] args) {
JFrame frame = new JFrame();
String[] item = {"list1","list2","list3","list4"};
JList list = new JList(item);
list.addListSelectionListener(new ListTest());
frame.getContentPane().add(list);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(50,100);
frame.setVisible(true);
}
public void valueChanged(ListSelectionEvent e) {
System.out.println("list changed");
}
}

A 回答 (1件)

ejbしか経験がない者です。


勉強がてらデバッグしてみました。
勉強になりました。
仕様のほどまでは判りません。

***************************

import javax.swing.*;
import javax.swing.event.*;

public class ListTest implements ListSelectionListener {


public static void main(String[] args) {
JFrame frame = new JFrame();
String[] item = {"list1","list2","list3","list4"};
JList list = new JList(item);

list.addListSelectionListener(new ListTest());
frame.getContentPane().add(list);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(50,100);
frame.setVisible(true);
}

public void valueChanged(ListSelectionEvent e) {

if (e.getValueIsAdjusting()){ //ここがミソのようです
System.out.println("list changed");
}
}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!