我想在運行時更改JTable中的默認數據。我正在使用netbeans。我試過這裏給出的解決方案adding data to JTable when working with netbeans在netbeans中填充JTable中的數據
jTable1.getModel()。setValueAt(row,column,value);
,但它給了我這個錯誤:
我想在運行時更改JTable中的默認數據。我正在使用netbeans。我試過這裏給出的解決方案adding data to JTable when working with netbeans在netbeans中填充JTable中的數據
jTable1.getModel()。setValueAt(row,column,value);
,但它給了我這個錯誤:
如果你想在你需要決定當你想讓它改變和代碼添加到適當的方法/事件運行時改變它。就其本身而言,您在類定義中有一個方法調用,它不是有效的代碼。
例如
public void setTableModel(){
displayTable.getModel().setValueAt(2,4,300);
}
然後在適當的時候調用setTableModel()。
,因爲你寫了這個代碼行了當前類的,你必須來包裝這些代碼行(S) 類/空/構造函數中,例如
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableProcessing extends JFrame implements TableModelListener {
private static final long serialVersionUID = 1L;
private JTable table;
public TableProcessing() {
String[] columnNames = {"Item", "Quantity", "Price", "Cost"};
Object[][] data = {
{"Bread", new Integer(1), new Double(1.11), new Double(1.11)},
{"Milk", new Integer(1), new Double(2.22), new Double(2.22)},
{"Tea", new Integer(1), new Double(3.33), new Double(3.33)},
{"Cofee", new Integer(1), new Double(4.44), new Double(4.44)}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
model.addTableModelListener(this);
table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
@Override
public boolean isCellEditable(int row, int column) {
int modelColumn = convertColumnIndexToModel(column);
return (modelColumn == 3) ? false : true;
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
}
@Override
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE) {
int row = e.getFirstRow();
int column = e.getColumn();
System.out.println(row + " : " + column);
if (column == 1 || column == 2) {
int quantity = ((Integer) table.getModel().getValueAt(row, 1)).intValue();
double price = ((Double) table.getModel().getValueAt(row, 2)).doubleValue();
Double value = new Double(quantity * price);
table.getModel().setValueAt(value, row, 3);
}
}
}
public static void main(String[] args) {
TableProcessing frame = new TableProcessing();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}