2008-09-17 2 views
1

이 코드를 실행하면 선택한 항목이 표시되지 않습니다. 난 이미 운이없는 별도의 스레드에서 실행하려고했습니다."ensureIndexIsVisible"을 사용하여 스윙 스크롤을 만드는 방법은 무엇입니까?

import javax.swing.JFrame; 
import java.awt.Container; 
import javax.swing.JList; 
import javax.swing.ListSelectionModel; 
import javax.swing.JScrollPane; 
import java.awt.Dimension; 

public class ScrollList extends JFrame { 
    int defaultValue; 

    ScrollList() { 
     Container cp = getContentPane(); 
     JList list = createList(); 
     defaultValue = 20; 

     cp.add(createScrollPane(list)); 
     pack(); 
     setVisible(true); 
     list.ensureIndexIsVisible(defaultValue); 
    } 

    JList createList() { 
     Integer[] model = new Integer[73]; 
     JList list = new JList(model); 

     for (int i = 1; i < model.length; i++) 
      model[i] = i; 
     list.setSelectedIndex(defaultValue); 

     return list; 
    } 

    JScrollPane createScrollPane(JList list) { 
     JScrollPane s = new JScrollPane(createList()); 

     s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     s.setPreferredSize(new Dimension(100, 200)); 

     return s; 
    } 

    public static void main(String[] args) { 
     new ScrollList(); 
    } 
} 

답변

1

나는 그것을 알아 냈다 !!

import javax.swing.JFrame; 
import java.awt.Container; 
import javax.swing.JList; 
import javax.swing.ListSelectionModel; 
import javax.swing.JScrollPane; 
import java.awt.Dimension; 

public class ScrollList extends JFrame { 
    final int defaultValue = 20; 

    ScrollList() { 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     Container cp = getContentPane(); 
     JList list = createList(); 

     cp.add(createScrollPane(list)); 
     pack(); 
     list.ensureIndexIsVisible(list.getSelectedIndex()); 

     setVisible(true); 
    } 

    JList createList() { 
     Integer[] model = new Integer[73]; 
     JList list = new JList(model); 

     for (int i = 1; i < model.length; i++) 
      model[i] = i; 
     list.setSelectedIndex(defaultValue); 
     return list; 
    } 

    JScrollPane createScrollPane(JList list) { 
     JScrollPane s = new JScrollPane(list); // MAJOR FIX HERE! 
     s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     s.setPreferredSize(new Dimension(100, 200)); 
     return s; 
    } 

    public static void main(String[] args) { 
     new ScrollList(); 
    } 
} 

대신 당신이 createScrollPane() 메소드에 전달 된 목록을 사용하여, 당신은 새로운 하나를 만들 :

는 코드입니다.

+0

:) 이제 왜이 오류가 나 자신에게 묻습니다. 해킹이 너무 많습니다. 감사! –

+0

하, 찾을 때까지 조금 걸렸어. Eclipse에서 코드를 신중하게 디버깅하기 전까지. – jjnguy

관련 문제