Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JListで項目の変更による選択の解除について

お世話になっています。

JListでいくつかの項目を表示します。
addListSelectionListenerで監視し、選択された項目によって様々な文字や数値が出力されるプログラムがあります。

このプログラムのリストの項目を数秒ごとに自動的に更新するように変更したいと思っています。

項目の変更はできたのですが、項目を選択したままリストが変更されるとエラーが発生して以降項目の選択ができない状態になってしまいます。

恐らく、リストの項目が更新されると前に選択された項目、それによって表示される出力数値もなくなるので、表示するものがないと知らせるエラーだと思います。

なので私的にはリストが更新されるときに選択されている項目が解除できればいいじゃないかと思いましたがどのようにすればいいかわかりません。

もしかしたら見当違いのやり方かもしれませんので他に何か方法がありましたら教えていただきたいと思います。

以下にプログラムの抜粋を載せておきます。


model = new DefaultListModel();
list = new JList(model);

// 選択された項目により表示を変更
list.addListSelectionListener(new ListSelectionListener(){
 public void valueChanged(ListSelectionEvent e){
  JList list2 = (JList)e.getSource();
  ListModel model1 = list2.getModel();
  if(e.getValueIsAdjusting() == false){
   FlaggedData fd = (FlaggedData)list2.getSelectedValue();
   double     selecttedValue = fd.getValue();
   int selecttedFlag = fd.getFlag();
   label1.setText(Double.toString(selecttedValue));
   if(selecttedFlag == 1){
    label2.setText("aaa");
   else{
    label2.setText("bbb");
   }
  }
 }
}

// このメソッドが数秒ごとに呼び出されリストの内容を変更する
public void SetData(int t_flag, Object objFrameData, int Num){
 s_DataNum = Num;
 s_vecFrameData = (Vector)objFrameData;
 s_vecData = new Vector[s_DataNum];
 s_value = new double[s_DataNum];
 s_flag = new int[s_DataNum];
 s_data = new FlaggedData[s_DataNum];
 for(i=0; i<s_DataNum; i++){
  s_vecData[i] = (Vector)s_vecFrameData.elementAt(i);
  s_value[i] = Double.parseDouble(String.valueOf(s_vecData[i].elementAt(1)));
  s_flag[i] = Integer.valueOf(String.valueOf(s_vecData[i].elementAt(4)));
  s_data[i] = new FlaggedData(s_value[i], s_flag[i]);
 }
 model.clear();
 for(i=0; i<s_DataNum; i++){
  model.addElement(s_data[i]);
 }
}

//データを関連づける
class FlaggedData{
 private double    fd_value;
 private int    fd_flag;

 public FlaggedData(double v, int f){
  fd_value    = v;
  fd_flag        = f;
 }
 public double getValue(){
  return fd_value;
 }
 public int getFlag(){
  return fd_flag;
 }
}

1

回答

2979

閲覧

1件の回答

評価

0

ListSelectionListenerじゃなくて、
ItemListenerを使ってはどう?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。