2014-11-05 3 views
1

다음 "샘플"코드가 거의 있지만 열 이름이 ~ 2 시간 코딩 후 dissapiared 및 찾을 수 없습니다. 누군가가 datamodel이 JTable에 열 이름을 추가하지 않는다고 말할 수 있습니까?JAVA JTable 데이터 모델 열 이름 버그

enter image description here 내 코드 :

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 

import javax.swing.AbstractAction; 
import javax.swing.DefaultListSelectionModel; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

class MyTableModel extends JPanel { 

    private static final int CHECK_COL = 3; 
    private static Object[][] DATA = { 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false}, 
     {"","","",false},{"","","",false},{"","","",false},{"","","",false} 
    }; 
    public static String[] COLUMNS = {"Debtid","Nev","VHO", "Check"}; 
    protected DataModel dataModel = new DataModel(DATA, COLUMNS); 
    private JTable table = new JTable(dataModel); 
    private DefaultListSelectionModel selectionModel; 

    public MyTableModel(){ 
     super(new BorderLayout()); 
     this.add(table); 
     this.add(new ControlPanel(), BorderLayout.SOUTH); 
     table.setPreferredScrollableViewportSize(new Dimension(250, 175)); 
     selectionModel = (DefaultListSelectionModel) table.getSelectionModel(); 
    } 

    private class DataModel extends DefaultTableModel { 

     public DataModel(Object[][] data, Object[] COLUMNS) { 
      super(data, COLUMNS); 
     } 

     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
      if (columnIndex == CHECK_COL) { 
       return getValueAt(0, CHECK_COL).getClass(); 
      } 
      return super.getColumnClass(columnIndex); 
     } 

     @Override 
     public boolean isCellEditable(int row, int column) { 
      return true; 
     } 

    } 

    private class ControlPanel extends JPanel { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = -7342459414751761853L; 

     public ControlPanel() { 
      this.add(new JLabel("Selection:")); 
      this.add(new JButton(new SelectionAction("Clear", false))); 
      this.add(new JButton(new SelectionAction("Check", true))); 
     } 
    } 

    private class SelectionAction extends AbstractAction { 

     boolean value; 

     public SelectionAction(String name, boolean value) { 
      super(name); 
      this.value = value; 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      for (int i = 0; i < dataModel.getRowCount(); i++) { 
       if (selectionModel.isSelectedIndex(i)) { 

        dataModel.setValueAt(value, i, CHECK_COL); 
       } 
      } 
     } 
    } 



    public void setValueAt_Cell(String val, int row, int col) { 
     // TODO Auto-generated method stub 
     if(row==DATA.length){ 
      DATA=cloneArray(DATA); 
     } 
     dataModel.setValueAt(val, row, col); 
    } 

    public static Object[][] cloneArray(Object[][] src) { 
     int length = src.length; 
     Object[][] target = new Object[length+1][src[0].length]; 
     for (int i = 0; i < length; i++) { 
      System.arraycopy(src[i], 0, target[i], 0, src[i].length); 
     } 
     target[length] = new Object[]{"","","",false}; 
     return target; 
    } 

    public String getValAtPos(int row,int col) { 
     //System.out.println(dataModel.getValueAt(row, col)); 
     return dataModel.getValueAt(row, col).toString(); 
    } 

    public int getRowCount(){ 
     return DATA.length; 
    } 
} 

답변

3

당신은 JScrollPaneJTable을 포장해야합니다 this.add(new JScrollPane(table));.