2013-02-12 76 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

相关问题