Java TableModel:通过单击最后一行动态添加行

时间:2013-02-12 15:54:54

标签: java swing jtable row tablemodel

所以我试图实现一个动态可编辑的列表,我想在我点击最后一行或者编辑最后一行时动态添加一行。 虽然我想知道如何实现actionlistener,但我知道如何添加行。非常感谢帮助。

 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);
   }
 }

1 个答案:

答案 0 :(得分:3)

  

我知道如何添加行

不基于您发布的代码。您的自定义TableModel使用固定大小的数组来存储数据。因此,除非每次都重新创建一个效率不高的数组,否则您将无法添加新行。

而只是使用DefaultTableModel。它已经支持addRow(...)方法。

如果要在单击最后一行时添加行,请将MouseListener添加到表中。然后,您可以使用JTable的rowAtPoint(...)方法来确定是否单击了最后一行。

如果要在编辑最后一行时添加行,则可以将TableModelListener添加到TableModel。然后,您可以侦听最后一行的更新。