3

ListSelectionListener インターフェイスを実装する次のクラスを作成しました。このクラスは、作成した JList の選択イベントを「リッスン」する必要があります。ユーザーがこのリストの行をクリックするたびに、selected_row の値が更新され、文字列 "The format row selected is ...." が変更されます。ただし、行を複数回クリックしても、select_row の値は変わりません。誰かがこれについての説明を私に提供できますか? 前もって感謝します!!

import java.util.List;

import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import ee.dobax.portal.CommonPath;

public class FormatListSelectionListener implements ListSelectionListener{

public ContentGenerated content;
private CommonPathList path_list;
private ConfigRenderingDialog dialog;

public FormatListSelectionListener(ConfigRenderingDialog dialog){

    content = dialog.content;
    path_list = dialog.pathList;
}

public void valueChanged(ListSelectionEvent e) {
    int selected_row;

    if(e.getValueIsAdjusting() == false){
        selected_row = e.getLastIndex();


    System.out.println("The format row selected is "+selected_row);
        path_list.addFormatListRowSelected(selected_row);

        List<CommonPath> list_p = content.getPathList(selected_row);

        Object[] path_list_to_array = new Object[list_p.size()];

        path_list.getContents().removeAllElements();

        for(int x = 0; x < list_p.size(); x++){
            path_list_to_array[x] = list_p.get(x);
            path_list.getContents().addElement(path_list_to_array[x]);
            }

        }
  }


 }   
4

3 に答える 3

5

ドキュメントを読んで、 と の間の選択が変更されたことが示されているだけListSelectionEventで、どの方向には変更されていないことを示しています。変更が発生した (aが起動された) ことがわかったら、現在選択されている値を から読み取ることができます。firstIndexlastIndexListSelectionEventJList

selected_row = ((JList) e.getSource()).getSelectedIndex();

selected_rowユーザー操作が単に選択されたオプションのみを選択解除する場合に備えて、負でないことを確認する必要があります。

于 2010-09-28T12:49:41.787 に答える
1

このリスナーを JList にアタッチするコードを教えてください。次のようになります。

list = new JList(listData);
listSelectionModel = list.getSelectionModel();
listSelectionModel.addListSelectionListener(
         new FormatListSelectionListener());

ListSelection リスナーの書き方を参照してください。

于 2010-09-28T12:53:11.543 に答える
0

e.getValueIsAdjusting() が true であることを確認したくありませんか? それは、イベントが変更されたことを意味するはずだからです。これがおそらく、一度は機能し (最初は変化がない可能性があります)、その後は機能しない理由です。

また、ブール値を返すので、 if(e.getValueIsAdjusting()) と言うように変更します。

于 2010-09-28T12:47:59.060 に答える