2012-05-23 4 views

답변

4

모델을 기반으로 셀 편집을 비활성화하십시오. TableModel에서 isCellEditable() 메서드를 재정의하거나 구현하여 확인란의 "값"을 반환합니다.

다음 예는 JComboBox를 기반으로하지 않지만, 그것은 행의 시작 부분에 체크 박스의 값에 따라 셀의 판을 사용하지 않도록 설정하는 방법을 보여

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 

public class TestTable { 

    public JFrame f; 
    private JTable table; 

    public class TestTableModel extends DefaultTableModel { 

     public TestTableModel() { 
      super(new String[] { "Editable", "DATA" }, 3); 
      for (int i = 0; i < 3; i++) { 
       setValueAt(Boolean.TRUE, i, 0); 
       setValueAt(Double.valueOf(i), i, 1); 
      } 
     } 

     @Override 
     public boolean isCellEditable(int row, int column) { 
      if (column == 1) { 
       return (Boolean) getValueAt(row, 0); 
      } 
      return super.isCellEditable(row, column); 
     } 

     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
      if (columnIndex == 0) { 
       return Boolean.class; 
      } else if (columnIndex == 1) { 
       return Double.class; 
      } 
      return super.getColumnClass(columnIndex); 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestTable().initUI(); 
      } 
     }); 
    } 

    protected void initUI() { 
     table = new JTable(new TestTableModel()); 
     f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.setLocationRelativeTo(null); 
     f.add(new JScrollPane(table)); 
     f.setVisible(true); 
    } 

} 
+0

+1 모델을 사용합니다. – trashgod

+0

편집을 위해 @trashgod Thx, 내 영어가 완벽하지 않다 ;-) 건배 –

+0

하지만 스윙 지식에 기반한 논리는 완벽하지 못합니다. – mKorbel