2011-01-15 14 views

答えて

3

単にあなたのTableModel(AbstractTableModelにを拡張する)あなたのテーブルモデルで

http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html#isCellEditable%28int,%20int%29

+0

これは、人々が値をクリックして変更することを防止します。これはおそらく、条件文でチェックすると、人々がデータをファイルに保存し直さないようにします。 –

+0

私にこれを聞かせてください。 JTableモデルを実装する場合、基本的に2次元配列を検索するメソッドを作成しています。したがって、isCellEditable = falseを設定すると、配列にデータを書き戻すことはできません。保存ボタンをクリックすると、JTableの新しい情報がオブジェクト配列に書き込まれるか、キーのいずれかにキーリストがある場合に表示されます。キーを変更すると新しい値が書き込まれます。あなたがボックス内をクリックして、この時点で値を変更することさえできないようにする場合はどうでしょうか? –

3

のisCellEditable()の実装でfalseを返す、あなたのような実装する必要があります。

 public class MyTableModel extends AbstractTableModel { 
      //table is not editable 
      public boolean isCellEditable() { 
       return false; 
      } 
    } 
+1

これは良い解決策です。ただし、TableModelは実際にはCristianのコードでDefaultTableModelを拡張することがあります。通常、DefaultTableModelを拡張できるだけのときにAbstractTableModelを拡張するのは正当な理由はありません。 – jzd

+1

よく、通常、自分のデータ型を指定することができないので、DefaultTableModelは使用しません。さらに重要なのは、ベクトルのベクトルを使用して迷惑になるようなものを格納します。しかし、普通の便利さのために、ほとんどの実装を提供するので、DefaultTableModelはそのような小さなタスクのためのより簡単な選択です!個人的には、私はそれを避ける。 –

0

てみてくださいこのコード。それは簡単で理解しやすいです。

DefaultTableModel model =new DefaultTableModel(6,8); 
table = new JTable(model){ 

      private static final long serialVersionUID = 2485117672771964339L; 

      @Override 
       public boolean isCellEditable (int row, int column) 
       { 
        return editable; 
       } 
     }; 
+0

「JTAble」ではなく「JTable」でなければなりませんか? –

+0

ありがとう私はそれを修正しました。 – Alejandro

2

オーケー、多分これは新機能ですが、私は私が使用できることが分かっ:

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

そして、それは私のために仕事をしてくれました。

+0

model.cellEditable!= view.enabled – kleopatra

11
DefaultTableModel tableModel = new DefaultTableModel() { 

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

table.setModel(tableModel); 
+0

@Matthew - これを実装しようとすると、テーブルが消えてしまいます。私のテーブルがJScrollPaneにあることは重要ですか?このように: 'JScrollPane editPatDocScrollPane = new JScrollPane(); JTable editPatDocTable =新しいJTable(data、columnNames); editPatDocScrollPane.setViewportView(editPatDocTable); ' – Jona

+0

@Jona何が違いがあるのか​​わかりません。セルはまだそこにあり、読み込み専用です。あなたの状況に助けが必要な場合は、消えているテーブルを示す自己完結型の例で新しい質問を開くことをお勧めします。 –

+0

私は同じ問題を抱えていました。私がやったのはJTable table =新しいJTable(data、columnNames)でした。次にsetModelを呼び出します。しかし、それはあなたのデータとcolumnNamesをオーバーライドします! defaultTableModelをデータとcolumnNamesで初期化してから、JTableに渡す必要があります。 – Lyth

関連する問題