2009-11-26 1 views
0

Java로 주소록 GUI를 만들고 있는데 ArrayList에있는 사람들의 이름을 모두 표시하는 JList이 있습니다 (아래에 언급 된 updateinfo 메서드로 채워짐). JList에있는 항목을 클릭하면 TextField이 그 사람 세부 정보로 업데이트됩니다. 전에는 버튼을 사용하기 전에 actionListeners을 사용했습니다. 나는 JListListSelectionListener을 사용해야한다는 것을 이해하지만 나는 이것을 구현하는 것처럼 보일 수 없다고 생각합니다. 아래 코드를 추가했습니다. 누군가 제발 도와 줄 수 있니? 내 actionlisteners와 연속성을 위해 나는 내부 클래스로하고 싶은하지만이Java - JList에서 textFields를 업데이트 중입니다.

JList jl; 
DefaultListModel list; 

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

답변

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 
    } 
}); 

을 익명 사용 여기의 수업은 가장 빠른 방법입니다. 읽을 거리가 약간 있지만 전형적인 패턴입니다. 당신 것,

0

예는 이것에 대한 ListSelectionListener에를 사용하는 것이 좋습니다

는 (... 당신이 내부 클래스를 선호 읽을 수 있지만 여기 손없는 IDE와 즉석에서 코드를 할 수 없습니다) 또한 목록을 단일 선택 (ListSelectionModel.SINGLE_SELECTION)으로 설정하려고합니다. 이렇게하면 사용자는 목록에서 하나의 항목 만 선택할 수 있습니다. 그런 다음 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); 
    } 


} 
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); 
    } 

곰 염두에 갈 수있는 유일한 방법이 아니다, 이것은 당신을위한 단지 출발점입니다.

내가 생각 sample http://img177.imageshack.us/img177/6294/capturadepantalla200911k.png

0

내가하는 JList가 사용 ListSelectionListener에가하지만 가없는 것해야한다는 것을 이해 :

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; 
    } 
} 

이 표시되는 내용이다 :

여기에 전체 작업 예제입니다 이것을 구현하기 위해

그러면 JList API를 읽어보십시오. 실습 예제가 들어있는 "목록 사용 방법"에 대한 스윙 튜토리얼에 대한 링크를 찾을 수 있습니다.

또한이 자습서에서는 두 번째 예제가 들어있는 "목록 선택 수신기 작성 방법"섹션을 찾을 수 있습니다.

기본 질문에 대한 자습서부터 시작하십시오.