[java] JTable을 편집 불가능하게 만드는 방법

JTable편집 불가능 하게 만드는 방법 ? 사용자가 셀의 값을 두 번 클릭하여 편집 할 수 없도록하고 싶습니다.



답변

당신은을 사용할 수 있습니다 TableModel.

다음과 같이 클래스를 정의하십시오.

public class MyModel extends AbstractTableModel{
    //not necessary
}

실제로 isCellEditable()false기본값이므로 생략 할 수 있습니다. (참조 : http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )

그런 다음 사용하는 setModel()당신의 방법을 JTable.

JTable myTable = new JTable();
myTable.setModel(new MyModel());


답변

isCellEditable 메소드를 재정의하고 원하는대로 구현할 수 있습니다. 예를 들면 다음과 같습니다.

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);

또는

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

   @Override
   public boolean isCellEditable(int row, int column) {
       //Only the third column
       return column == 3;
   }
};

table.setModel(tableModel);

JTable이 사라지는 경우에 대한 참고 사항

당신이 경우 JTable당신이 사용할 때 사라지고 그것은 가장 가능성이 당신이 사용할 필요가 있기 때문입니다 DefaultTableModel(Object[][] data, Object[] columnNames)대신 생성자를.

//instance table model
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);


답변

table.setDefaultEditor(Object.class, null);


답변

그냥 추가

table.setEnabled(false);

그것은 나를 위해 잘 작동합니다.


답변

값 집합 ( “new JTable (Vector, Vector)”사용)에서 TableModel을 자동으로 생성하는 경우 열에서 편집기를 제거하는 것이 더 쉬울 수 있습니다.

JTable table = new JTable(my_rows, my_header);

for (int c = 0; c < table.getColumnCount(); c++)
{
    Class<?> col_class = table.getColumnClass(c);
    table.setDefaultEditor(col_class, null);        // remove editor
}

편집자가 없으면 데이터를 편집 할 수 없습니다.


답변

나는 이것을 사용했고 그것은 효과가 있었다 : 그것은 매우 간단하고 잘 작동한다.

JTable myTable = new JTable();
myTable.setEnabled(false);


답변

새 DefaultCellEditor 클래스를 만듭니다.

public static class Editor_name extends DefaultCellEditor {
  public Editor_name(JCheckBox checkBox) {
   super(checkBox);
  }
  @Override
  public boolean isCellEditable(EventObject anEvent) {
    return false;
  }
}

setCellEditor를 사용하십시오.

JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));