2012-11-02 4 views
0

오라클의 공식 페이지에있는 예제의 코드를 사용하고 있습니다. 테이블 데이터 정렬 및 필터링 용. 원래 변형에는 두 개의 필드가 있습니다. 하나는 필터링 기준을 입력하는 필드이고 다른 하나는 그리드의 어떤 행이 선택되어 있는지 보여주는 필드입니다. 두 번째 것은 필요없고 필터 필드 만 남기고 싶지만 뭔가 놓친 것 같습니다. 내가 TI는 컴파일 할 때 SpringLayout으로 만든 텍스트 필드 제거하기

public TableFilterDemo() { 
     super(); 
     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

     //Create a table with a sorter. 
     MyTableModel model = new MyTableModel("customers.dat"); 
     sorter = new TableRowSorter<MyTableModel>(model); 
     table = new JTable(model); 
     table.setRowSorter(sorter); 
     table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
     table.setFillsViewportHeight(true); 

     //For the purposes of this example, better to have a single 
     //selection. 
     // table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

     //When selection changes, provide user with row numbers for 
     //both view and model. 
    /* table.getSelectionModel().addListSelectionListener(
       new ListSelectionListener() { 
        public void valueChanged(ListSelectionEvent event) { 
         int viewRow = table.getSelectedRow(); 
         if (viewRow < 0) { 
          //Selection got filtered away. 
          statusText.setText(""); 
         } else { 
          int modelRow = 
           table.convertRowIndexToModel(viewRow); 
          statusText.setText(
           String.format("Selected Row in view: %d. " + 
            "Selected Row in model: %d.", 
            viewRow, modelRow)); 
         } 
        } 
       } 
     ); 
*/ 

     //Create the scroll pane and add the table to it. 
     JScrollPane scrollPane = new JScrollPane(table); 

     //Add the scroll pane to this panel. 
     add(scrollPane); 

     //Create a separate form for filterText and statusText 
     JPanel form = new JPanel(new SpringLayout()); 
     JLabel l1 = new JLabel("Student Number:", SwingConstants.TRAILING); 
     form.add(l1); 
     filterText = new JTextField(); 
     //Whenever filterText changes, invoke newFilter. 
     filterText.getDocument().addDocumentListener(
       new DocumentListener() { 
        public void changedUpdate(DocumentEvent e) { 
         newFilter(); 
        } 
        public void insertUpdate(DocumentEvent e) { 
         newFilter(); 
        } 
        public void removeUpdate(DocumentEvent e) { 
         newFilter(); 
        } 
       }); 
     l1.setLabelFor(filterText); 
     form.add(filterText); 
     /* JLabel l2 = new JLabel("Status:", SwingConstants.TRAILING); 
     form.add(l2); 
     statusText = new JTextField(); 
     l2.setLabelFor(statusText); 
     form.add(statusText); */ 
     SpringUtilities.makeCompactGrid(form, 2, 2, 6, 6, 6, 6); 
     add(form); 
    } 

내가 실수를 많이 얻을하지만 첫 번째는 다음과 같습니다 : 아래는 내가 생각 코드에 대한 의견 내 코드는 불필요하다

예외 스레드에서 "AWT-EventQueue의 -0 "java.lang.ArrayIndexOutOfBoundsException : 그런 아이 없습니다 : 2

답변

0

주석으로 블록이 필요하지 않습니다하지만 내 원래의 질문에처럼 함께 SpringUtilities.makeCompactGrid(form, 1, 2, 6, 6, 6, 6); 전달 된 2 매개 변수 2에서 변경해야 1 여기에 있습니다.