データをJTable
にロードする関数を作成しました。このテーブルのすべてのセルが編集可能であることを除いて、すべてが正常に機能しています。ところで、私はテーブルモデルにdefaultTableModel
を使用しました。 NetbeansIDEでこれを行っています。助けてください。これが私のコードです:
private void updateTable(String searchText){
if(searchText != null)
this._sqlCmd = this._sqlCmd + " WHERE "+columnCombo.getSelectedItem()+" LIKE '%"+searchText+"%'";
jTable1.setSurrendersFocusOnKeystroke(true);
table = (javax.swing.table.DefaultTableModel) jTable1.getModel();
try{
table.setRowCount(0);
}catch(Exception e){}
try {
ResultSet rs = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY).executeQuery(_sqlCmd);
while (rs.next()){
Object[] data = new Object[numOfCols];
for(int i=0; i<data.length; i++){
data[i] = rs.getObject(i+1);
}
table.addRow(data);
}
table.fireTableDataChanged();
} catch (SQLException ex) {
Logger.getLogger(FindContactGrid.class.getName()).log(Level.SEVERE, null, ex);
}
}
_ private TableModel model = new DefaultTableModel(data, columnNames)
{
public boolean isCellEditable(int row, int column)
{
return false;//This causes all cells to be not editable
}
};
private JTable table = new JTable(model);
_
編集。 Netbeans IDEデザイナーでこれを行う場合は、以下の手順に従ってください。
- JTableが配置されているフォームを選択します
- ナビゲーションペインから、JScrollPaneを展開し、JTableを右クリックして、以下に示すようにコードのカスタマイズを選択します。
{public boolean isCellEditable(int row, int column){return false;}}
最後のクロージングブラックの前);最終的なセットアップは次のようになります:
DefaultTableModelを使用する場合は、メソッドisCellEditableをオーバーライドして、GUIを構築するときに実装できます。
table.setModel(new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
Netbeansを別の方法で使用することも可能です。 OPに記載されているように、デフォルトのテーブルモデルを引き続き使用する場合は、必要がない場合は新しいテーブルモデルを作成する必要はありません。
JTableの「プロパティ」を選択します
「プロパティ」で「TableModel」フィールドを選択すると、別のダイアログボックスが開きます。
そこから、各列の「編集可能」チェックボックスフィールドを変更できます。
これがどのバージョンから開始されるかはわかりませんが、Netbeans7.2を使用しています
他の人が言ったように、あなたはあなた自身のDefaultTableModel
を作成し、isCellEditable
をオーバーライドしなければなりません。 Netbeansデザイナで使用するには:
new JTable(new MyModel())
(クラスMyModelがAbstractTableModelを拡張すると仮定します)これを試して
JTable table = new JTable();
table.setEnabled(false);