2014-05-13 1 views
-1
import java.sql.*; 
    import java.awt.event.*; 
    import javax.swing.*; 
    import javax.swing.event.ListSelectionEvent; 
    import javax.swing.event.ListSelectionListener; 
    import java.awt.*; 
    import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    public class Ui2 extends JFrame { 
     JLabel l, l1; 
     JFrame f; 
     JPanel panel; 
     JScrollPane scrollpane; 
     int r; 
     JList list; 
     Ui2() { 
      super("HADOOP GUI"); 
      panel = new JPanel(); 
      setContentPane(panel); 
      panel.setSize(500, 500); 
      SpringLayout x = new SpringLayout(); 
      panel.setLayout(x); 
      DefaultListModel listmodel = new DefaultListModel(); 
      for (int i = 1; i <= 10; i++) { 
       listmodel.addElement("Record" + i); 
      } 
      list = new JList(listmodel); 

      list.setVisibleRowCount(5); // here is problem 
      list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
      scrollpane = new JScrollPane(list); 
      x.putConstraint(SpringLayout.WEST, scrollpane, 150, SpringLayout.WEST, panel); 
      x.putConstraint(SpringLayout.NORTH, scrollpane, 30, SpringLayout.NORTH, panel); 
      panel.add(scrollpane); 
      Dimension d = list.getPreferredSize(); 
      d.width = 200; 
      scrollpane.setPreferredSize(d); 
      l1 = new JLabel("Default"); 
      x.putConstraint(SpringLayout.WEST, l1, 150, SpringLayout.WEST, panel); 
      x.putConstraint(SpringLayout.NORTH, l1, 300, SpringLayout.NORTH, panel); 
      panel.add(l1); 
      list.addListSelectionListener(new ListSelectionListener() { 
       @Override 
       public void valueChanged(ListSelectionEvent arg0) { 

       } 

      }); 

     } 
    } 
+0

정확히 작동하지 않는 항목은 무엇입니까? –

+0

list.setVisibleRowCount (5); jlist에 5 개 이상의 값을 추가하면 표시되는 행 수가 늘어납니다. 그 jlist 쇼 5 행을 원하고 jlist 사용자의 다른 값을 보려면 jlist를 스크롤해야합니다. – Himanshu

답변

0

작동하지 setVisibleRowCount.

SpringLayout을 사용하여 작업을 수행 할 수 없어서 응용 프로그램을 약간 다시 작성합니다 (이전에는 사용하지 않았 음). 그러나 BorderLayout으로 잘 작동합니다. 은 JList이 포함되어 있으며 이는 JPanel으로 레이아웃 관리자를 정의하지 않은 상태로 포장하면됩니다. 그 이유는 LayoutManager가 사용 가능한 공간에 따라 구성 요소를 레이아웃하므로, setVisisbleRowCount은 무시 될 것이라고 생각합니다. 그러나, 다른 LayoutManager를 사용하면 구성 요소가 다르게 표시 될 수 있습니다. 개인적으로 간단한 배열 (북쪽, 남쪽, ...)에 BorderLayout을 사용하고 일련의 병렬 구성 요소에 대해서는 FlowLayout, 고급 구성 요소 인 경우에는 GridbagLayout을 사용하는 것이 좋습니다. 거의 모든 응용 프로그램에 충분해야합니다.

import java.awt.BorderLayout; 

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

public class Ui2 extends JFrame { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 2464942276900547953L; 
    private JLabel l1; 
    private JPanel panel; 
    private JScrollPane scrollpane; 
    private JList<String> list; 

    public Ui2() { 
     super("HADOOP GUI"); 
     panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 
     setContentPane(panel); 
     panel.setSize(500, 500); 

     DefaultListModel<String> listmodel = new DefaultListModel<String>(); 
     for (int i = 1; i <= 10; i++) { 
      listmodel.addElement("Record" + i); 
     } 

     list = new JList<String>(listmodel); 
     list.setVisibleRowCount(5); // here is problem 
     list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     scrollpane = new JScrollPane(list); 

     JPanel p = new JPanel(); 
     p.add(scrollpane); 
     panel.add(p, BorderLayout.CENTER); 
     l1 = new JLabel("Default"); 
     panel.add(l1, BorderLayout.SOUTH); 
     list.addListSelectionListener(new ListSelectionListener() { 
      @Override 
      public void valueChanged(ListSelectionEvent arg0) { 

      } 

     }); 

    } 
} 
+1

'LayoutManager를 설정 한 JPanel에 추가 된 JLists에는 setVisibleRowCount (int)를 사용할 수 없습니다. '- 물론 가능합니다. setVisibleRowCount() 메소드가 있으므로 JList에 적합한 크기를 결정할 수 있습니다. SpringLayout은 사용할 복잡한 레이아웃 관리자이며 OP가 제약 조건을 올바르게 설정하지 않았다고 생각합니다. 'JList를 포함하고있는 Scrollbar를 외부 JPanel에 랩핑하면됩니다. 먼저 스크롤 패널을 패널에 추가 할 필요가 없습니다. 예를 들어, BorderLayout의 북쪽에 scrollPane를 추가 할 수 있습니다. – camickr

관련 문제