我正在使用java和mySQL製作數據庫管理系統。我使用jTable作爲數據庫的接口。j表格單元格不變
雖然帖子看起來不長,但對於一個有經驗的人來說,這個問題不會那麼複雜,(我猜)。
這是我的問題。選擇一個單元格後,我可以輸入值,(沒有可能性)。但輸入值後,當我點擊其他單元格時,輸入的值將消失,並返回到空值。
找不出原因。我對jTables沒有太多經驗。但我認爲問題出在桌面模型上。
這是我的TableModel
import Templates.TableEntry;
import java.util.LinkedList;
import javax.swing.table.AbstractTableModel;
public class myTableModel extends AbstractTableModel {
public static final int DATE_INDEX = 0;
public static final int ORDERNO_INDEX = 1;
public static final int ROOT_INDEX = 2;
public static final int HIDDEN_INDEX = 3;
public String[] columnnames;
public LinkedList<TableEntry> entryList;
public myTableModel(String[] columnNames) {
this.columnnames = columnNames;
entryList = new LinkedList<TableEntry>();
}
@Override
public String getColumnName(int column) {
return columnnames[column];
}
@Override
public boolean isCellEditable(int row, int column) {
if (column == HIDDEN_INDEX) {
return false;
} else {
return true;
}
}
@Override
public Class getColumnClass(int column) {
return String.class;
}
@Override
public String getValueAt(int row, int column) {
TableEntry record = entryList.get(row);
switch (column) {
case DATE_INDEX:
return record.date;
case ORDERNO_INDEX:
return record.jobOdrerNo;
case ROOT_INDEX:
return record.rootCardNos;
default:
return null;
}
}
public void setValueAt(String value, int row, int column) {
TableEntry record = entryList.get(row);
switch (column) {
case DATE_INDEX:
record.date = value;
break;
case ORDERNO_INDEX:
record.jobOdrerNo = value;
break;
case ROOT_INDEX:
record.rootCardNos = value;
break;
default:
System.out.println("invalid index");
}
updateTable(row, column);
}
public void updateTable(int row, int column) {
fireTableCellUpdated(row, column);
}
@Override
public int getRowCount() {
return entryList.size();
}
@Override
public int getColumnCount() {
return columnnames.length;
}
public boolean hasEmptyRow() {
if (entryList.size() == 0) {
return false;
}
TableEntry entry = entryList.get(entryList.size() - 1);
if ("".equals(entry.date)) {
return true;
} else {
return false;
}
}
public void addEmptyRow() {
entryList.add(new TableEntry());
fireTableRowsInserted(entryList.size() - 1, entryList.size() - 1);
}
public void deleteRow(int i) {
if (i != 0) {
entryList.remove(i);
fireTableRowsDeleted(i - 1, i + 1);
}
}
}
很抱歉的長度。但爲了完整起見,我發佈了整個代碼。大部分零件都可以忽略。
TableEntry是一個簡單的類。
package Templates;
public class TableEntry {
public String date;
public String jobOdrerNo;
public String rootCardNos;
public String yardRootCard;
public String MCISO_NO;
public String service_maintenance_breakdown;
public String jobNo;
public String machineName;
public String fault;
public String problematicPart;
public String person;
public String action;
public String startTime;
public String finishedTime;
public String durationOfRepair;
public String spareParts;
public String itemCode;
public String no;
public String value;
public String totalCost;
public String remark;
public String breakdownAndSolution;
}
希望我提供所有的細節。這對我來說是一個真正的bug。任何幫助表示讚賞。 Thanx提前..!
(如果需要澄清,請讓我知道..難以發佈整個項目這是一個有點龐大..:d)
*「(如果需要澄清,請讓我知道......難以發佈整個項目,這有點巨大..:D) 「*嘗試編輯一個表格,其中TableEntry有2個字段,表格只有2行。硬編碼數據以分解數據庫。如果[SSCCE](http://sscce.org/)失敗,並且您無法看到原因,請將其作爲對該問題的修改。 Thanx,我會試試.. – 2012-07-24 07:04:45
Thanx!情況就是如此。它現在工作正常!.. thanx很多! – Anubis 2012-07-24 07:12:22