web-dev-qa-db-ja.com

JTableを編集不可にする方法

JTableを編集不可にする方法は?ユーザーがダブルクリックしてセルの値を編集できるようにしたくない。

87
Siddharth Raina

TableModel を使用できます。

次のようなクラスを定義します。

public class MyModel extends AbstractTableModel{
    //not necessary
}

実際、isCellEditable()はデフォルトではfalseなので、省略してもかまいません。 (参照: http://docs.Oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

次に、JTablesetModel()メソッドを使用します。

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

たとえば、メソッド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);
141
nelson eldoro

追加するだけ

table.setEnabled(false);

私にとってはうまくいきます。

37
Siddhu
table.setDefaultEditor(Object.class, null);
32
Oleg Mikhailov

値のセット(「新しい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
}

エディターがなければ、データは編集できません。

8
freesoft

私はこれを使用し、動作しました:それは非常にシンプルでうまく動作します。

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

新しい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()));
2
Ehsan Jelodar