他のセルのブール状態 (チェックボックス) に従って、セル属性を編集可能から編集不可に変更したい UI で jTable を作成しました。私はいくつかの例を見てきましたが、NetBeans で UI を作成するという間違いを犯し、編集することさえできない大量のコードを作成したことが主な原因で、意図したことを実行できませんでした。
マイ テーブル:テーブル http://freepicupload.com/images/337jtable1.png !
編集:修正済み、動作中、以下のコード。
テーブル/モデルを生成するコード:
jTable1.setModel(new MyTableModel());
テーブル モデルと実装されたロジック:
class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"Job Type",
"Name",
"avg Time",
"Buffer",
"Buffer Parts",
"Color"};
private Object[][] data = {
{"1", "Station 1",
new Integer(10), new Boolean(false), new Integer(0), Color.red},
{"2", "Station 2",
new Integer(10), new Boolean(false), new Integer(0), Color.blue},
{"3", "Station 3",
new Integer(10), new Boolean(false), new Integer(0), Color.green},
{"4", "Station 4",
new Integer(10), new Boolean(false), new Integer(0), Color.orange},
{"5", "Station 5",
new Integer(10), new Boolean(false), new Integer(0), Color.black}
};
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*
* Don't need to implement this method unless your table's
* editable.
*/
@Override
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col == 0) { return false; }
else if (col == 4) {
/*if (getValueAt(row,(col-1)) == "false") { System.out.println("NAO PODES EDITAR BOI"); }
else if (getValueAt(row,(col-1)) == "true") { System.out.println("Podes que eu deixo!"); } */
boolean di = (Boolean) getValueAt(row,(col-1));
if (!di) { return false; }
else { return true; }
}
else { return true; }
}
/*
* Don't need to implement this method unless your table's
* data can change.
*/
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}
この場合、列 3 のチェックボックスがチェックされている (true の状態) 場合にのみ、列 4 のセルを編集できます。それが役に立てば幸い!