2013-02-12 74 views
0

所以我試圖實現一個動態可編輯列表,並且當我點擊最後一行或者如果我編輯最後一行時,我想動態添加一行。 我知道如何添加行,但我想知道如何實現actionlistener。幫助將不勝感激。Java TableModel:通過點擊最後一行動態添加一行

import java.awt.BorderLayout; 
import java.util.Date; 

import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 
import javax.swing.table.TableModel; 

public class EditListAction { 
    public static void main(String args[]) { 
    TableModel model = new AbstractTableModel() { 
    Object rowData[] = {"English","hindi","Spanish","Russian" }; 

     String columnName = new String("Languages"); 

     public int getColumnCount() { 
     return 1; 
     } 

     public String getColumnName() { 
     return columnName; 
     } 

     public int getRowCount() { 
     return rowData.length; 
     } 

     public Object getValueAt(int row,int col) { 
     return rowData[row]; 
     } 

     public Class getColumnClass(int column) { 
     return (getValueAt(0, 1).getClass()); 
     } 

     public void setValueAt(Object value, int row,int column) { 
      if(column==0){ 
     rowData[row] = value; 
      } 
     } 

     public boolean isCellEditable(int row, int column) { 
     return (column == 0); 
     } 



    }; 

    JFrame frame = new JFrame("Column Renderer Table"); 
    JTable table = new JTable(model); 
    JScrollPane scrollPane = new JScrollPane(table); 
    frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 
    frame.setSize(400, 150); 
    frame.setVisible(true); 
    } 
} 

回答

3

我知道如何添加該行

不是基於你發佈的代碼。您的自定義TableModel使用固定大小的數組來存儲數據。因此,除非每次重新創建陣列效率不高,否則您將無法添加新行。

取而代之的只是使用DefaultTableModel。它已經支持addRow(...)方法。

如果您想在單擊最後一行時添加一行,請將MouseListener添加到表中。然後,您可以使用JTable的rowAtPoint(...)方法確定是否最後一行被點擊。

如果要在編輯最後一行時添加行,則可以將TableModelListener添加到TableModel。然後,您可以監聽最後一行的更新。

+0

做了你的建議。工作:)謝謝:) – 2013-02-12 17:43:43

相關問題