0

私はJavaで名簿GUIを作成してJListいますが、私の中にいる人の名前をすべて表示するGUIがありますArrayList(これは、以下で説明するupdateinfo方法で入力されます)。のアイテムをクリックするとJListTextFieldその人の詳細で更新されます。以前はボタンのみを使用していたため、actionListeners。必需品だとは思いますJListListSelectionListener、実装できないようです。以下にコードのスニペットを追加しました。誰か助けてもらえますか?私との継続性のために、actionlisteners私はそれを内部クラスとして持ちたいのですが、これは重要ではありません

JList jl;
DefaultListModel list;

list = new DefaultListModel();
this.jl = new JList(this.list);
//add ListSelectionListener????
updateList();
this.add(this.jl, layout);
4

4 に答える 4

1

リスナーを追加してから、現在選択されているインデックスをクエリするだけです。

サンプルを作成しました。お役に立てば幸いです。

これは関連するセクションです:

    private JComponent list() {
        final JList list =  new JList( data);
        list.addListSelectionListener(new ListSelectionListener() {
          public void valueChanged(ListSelectionEvent e) {
            int i = list.getSelectedIndex();
            nameTextField.setText( i >= 0 ? data.get( i ) : "" );
          }
        });
        return new JScrollPane( list );
    }

これが唯一の方法ではないことを心に留めておいてください。これはあなたにとっての出発点にすぎません。

完全な作業サンプルは次のとおりです。

import java.util.Vector;
import java.util.Arrays;

import java.awt.BorderLayout;

import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JComponent;

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

public class JListSample {

    private Vector<String> data = new Vector<String>( 
            Arrays.asList( new String []  {
                    "one", "two", "three"  
            })
    );

    private JTextField nameTextField;

    public static void main( String [] args) {
        JListSample s = new JListSample();
        s.run();
    }
    public  void run() {
        JFrame frame = new JFrame("Selection test");
        frame.add( list(), BorderLayout.WEST );
        frame.add( editPanel() );
        frame.pack();
        frame.setVisible( true );

    }

    private JComponent list() {
        final JList list =  new JList( data);
        list.addListSelectionListener(new ListSelectionListener() {
          public void valueChanged(ListSelectionEvent e) {
            int i = list.getSelectedIndex();
            nameTextField.setText( i >= 0 ? data.get( i ) : "" );
          }
        });
        return new JScrollPane( list );
    }
    private JComponent editPanel() {
        JPanel panel = new JPanel();
        panel.add(  new JLabel("Name:") );
        nameTextField = new JTextField(10);
        panel.add( nameTextField );
        return panel;
    }
}

表示される内容は次のとおりです。

サンプル http://img177.imageshack.us/img177/6294/capturadepantalla200911k.png

于 2009-11-26T16:17:50.790 に答える
0

次のように、選択リスナーをリストに追加するだけです。

jl.addSelectionListener(new ListSelectionListener() {

  public void valueChanged(ListSelectionEvent e) {
     // evaluate e if necessary and call a method
     // in your class to write the text in the textfield
     int selectedRow = e.getFirstIndex(); // more complicate for multiselects
     updateTextFieldWithName(selectedRow); // to be implemented
  }
});

このような匿名クラスを使用するのが最も簡単な方法です。少し読みにくいですが、典​​型的なパターンです。

(内部クラスを好むと読んだだけですが、IDEが手元にないため、ここでその場でコーディングすることはできません...)

于 2009-11-26T15:47:45.577 に答える
0

はい、これには ListSelectionListener を使用します。おそらく、リストを単一選択 (ListSelectionModel.SINGLE_SELECTION) に設定することもできます。これにより、ユーザーはリスト内の 1 つの項目のみを選択できるようになります。次に、listSelectionListener を追加し、イベントの valueChanged で次のようなことを行います (正確な構文ではありません)。

valueChanged(ListSelectionEvent e){
   int idx = e.getFirstIndex();
   int idx2 = e.getLastIndex();  //idx and idx2 should be the same if you set SingleSel
   if(idx==idx2){
     //here you can get the person detail however you have them stored.  You can get   them from the model like so,
      Object personObj = MYLIST.getModel().getElementAt(int index); 
   }


 }
于 2009-11-26T15:48:01.583 に答える
0

JList は ListSelectionListener を使用する必要があることは理解していると思いますが、これを実装できないようです

それでは、JList API を読むことから始めましょう。「リストの使用方法」に関する Swing チュートリアルへのリンクがあり、実際の例が含まれています。

また、チュートリアルには、2 番目の例を含む「リスト選択リスナーの作成方法」のセクションがあります。

基本的な質問のチュートリアルから始めます。

于 2009-11-26T17:10:57.200 に答える