2012-07-16 6 views
1

저는 Java에 대해 처음 접하고 특히 스윙하기 쉽습니다. Netbeans 6.8을 사용하여 개발합니다.JList AbstractListModel - fireIntervalAdded & 새 요소로 자동 스크롤

사용자 지정 AbstractListModel을 사용하는 JList가 있습니다. 이 AbstractListModel은 데이터베이스의 데이터에 대한 변경 사항을 추적하고 새 요소가 목록에 추가 될 때 fireIntervalAdded를 호출합니다. 이것은 완벽하게 작동합니다.

내가 겪고있는 문제는 JList (또는 JScrollPane)가 자동으로 목록의 새 요소로 스크롤되기를 바랍니다. 나는 JList.ensureIndexIsVisible을 사용할 수 있다고 읽었지만 관련 ListModel에서 JList의 인스턴스에 대한 참조를 얻는 법을 모르겠습니다 (ListModel 내에서 'fireIntervalAdded'를 발생시키기 때문에).

조금 설명하기 위해 SQL 서버에서 새 데이터를 폴링하기 위해 ListModel 내에 폴러를 작성했습니다. ListModel을리스트의 "데이터 소스"라고 생각하기 때문에,이 ListModel 내부에 데이터를 수집하고 (내 경우에는 폴링하는) 로직을 넣을 필요가있다. 튜토리얼에서는, 모델 자체로부터의 제어 스크롤의 특정의 필요성을 커버하고 있지 않는 것 같습니다 (ListModel는 복수의 JList로 동시에 사용할 수 있기 때문에 의미가 있습니다 .....)

무엇을 할 수 있습니까? JList를 ListModel 코드 내에서 마지막으로 만든 요소로 스크롤하려면?

또한 JList에서 새 요소를 추가 할 때 발생하는 이벤트를 찾을 수 있으면 문제를 해결할 수 있다고 상상하지만 아무 것도 발견하지 못했습니다.

감사

- 편집 -

MadProgrammer의 반응에 좋아, 기본, 여기에 내가 만든 것입니다 : 개인적으로

public class JListDataListener implements ListDataListener { 
    JList _listToControl = null; 
    public JListDataListener(JList listToControl) { 
     this._listToControl = listToControl; 
     this._listToControl.getModel().addListDataListener(this); 
    } 

    public void intervalAdded(final ListDataEvent e) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
          public void run() { 
           _listToControl.ensureIndexIsVisible(e.getIndex1() + 1); 
          } 
         }); 
    } 

    public void intervalRemoved(ListDataEvent e) { 
     //throw new UnsupportedOperationException("Not supported yet."); 
    } 

    public void contentsChanged(ListDataEvent e) { 
     //throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 
+0

참조 http://stackoverflow.com/questions/2695767/unable-to-programatically-scroll-to -last-item-in-jlist – Reimeus

+0

읽었습니다 ... ensureIndexIsVisible을 호출하기 위해 JList에 대한 참조가 필요하지 않습니까? ListModel 내에서이 참조를 얻으려면 어떻게해야합니까? – JFTxJ

답변

2

, 내가 직접 UI를 & 변화를 시도하지 것이다 이런 모델에서. 문제의 목록을 참조하여 모델에 다른 수신기를 연결하는 것이 좋습니다. 그러면 솔루션을 재사용 할 수 있습니다.

내가 JList의 &는 전문 내부 리스너를 사용 연장 유혹 될 수 있지만, 사용자의 요구 사항에 내려 오는

+0

그건 이해가 돼 ....... – JFTxJ

+0

그것은 완벽하게 작동합니다! 감사합니다 MadProgrammer :-) – JFTxJ

+0

도움이 될 수있어서 좋은 : D 조 – MadProgrammer