2011-09-07 141 views

回答

4

如果你想在你需要決定你想讓它改變和代碼添加到適當的方法/事件運行時改變它。就其本身而言,您在類定義中有一個方法調用,它不是有效的代碼。

例如

public void setTableModel(){ 
    displayTable.getModel().setValueAt(2,4,300); 
} 

然後在適當的時候調用setTableModel()。

1

,因爲你寫了這個代碼行了當前類的,你必須來包裝這些代碼行(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); 
    } 
}