2016-10-21 13 views
2

에 JScrollPane의 추가 나는 다음과 같은 코드가 있습니다 홈페이지 :는 JList의

package PackageMain; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.WindowConstants; 

public class Main { 

public static JFrame frame = new JFrame("Window"); 
public static PanelOne p1; 
public static PanelTwo p2; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.setBounds(100, 100, 800, 600); 
       p1 = new PanelOne(); 
       p2 = new PanelTwo(); 
       frame.setVisible(true); 
      } catch(Exception e){ 

      } 
     } 
    }); 
} 

그리고 클래스 2 : 내가 표시 할 JScrollPane의를 얻기 위해 잔뜩 시도했습니다

package PackageMain; 

import java.awt.Color; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.DefaultListModel; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.ScrollPaneConstants; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 

public class PanelOne{ 

public PanelOne(){ 
    loadScreen(); 
} 

public void loadScreen(){ 
    JPanel p1 = new JPanel(); 
    DefaultListModel model = new DefaultListModel<String>(); 
    JList list = new JList<String>(model); 
    // 
    JScrollPane scroll = new JScrollPane(list); 
    list.setPreferredSize(null); 
      scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS; 
    scroll.setViewportView(list); 
    // 
    list.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent arg0) { 
      System.out.println("You selected " + list.getSelectedValue()); 
     } 
    }); 
    p1.add(list); 
    Main.frame.add(p1); 
    Main.frame.revalidate(); 
    Main.frame.repaint(); 
    for (int i = 0; i < 100; i++){ 
     model.addElement("test"); 
    } 
} 

을 JList에 있지만, 원하지 않습니다. 가장 좋은 추측은 모델이 문제를 일으키고 있지만 단순한 버전이며 모델이 있어야한다는 것입니다.

답변

2
JScrollPane scroll = new JScrollPane(list); 

당신이 올바른지가 JScrollPane에 JList에 추가합니다.

p1.add(list); 

그런데 당신은 JPanel의 , which is incorrect. A component can only have a single parent, so the JList의 is removed from the JScrollPane`에 JList를 추가합니다.

당신은 JPanelJScrollPane을 추가해야

p1.add(scroll); 
+0

큰 마음이 비슷하게 생각 1+ –

2

JScrollPane의 뷰포트에 너무 많은 구성 요소에 목록을 추가하고 있습니다. OK이지만, 에 p1 JPanel - OK가 아닙니다. 뷰포트에만 추가 한 다음 GUI에 JScrollPane을 추가합니다 (필요한 경우 p1). 또한

: 생성자에서 당신이하고있는 것처럼 뷰포트보기에 두 번 JScrollPane의에 JList에 추가 할 필요가

  • 없다가, 한 번 충분하다.
  • list.setPreferredSize(null); ????
0

그냥 List보다는 프레임에 Scroll Pane을 추가합니다.

변화 아래의 코드를 사용하여 라인 :

Main.frame.add(scroll);