0

所以我试图实现一个动态可编辑的列表,当我点击最后一行或编辑最后一行时,我想动态添加一行。尽管我想知道如何实现 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);
   }
 }
4

1 回答 1

3

我知道如何添加行

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

相反,只需使用 DefaultTableModel。它已经支持 addRow(...) 方法。

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

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

于 2013-02-12T16:14:10.293 回答