Java 从JTable中添加和删除

Java 从JTable中添加和删除,java,swing,jtable,add,Java,Swing,Jtable,Add,我有一个带有自定义模型、自定义CellEditor和CellRenderer的JTable,我想在这个表中删除和添加数据 我该怎么做 我的型号: public class frandtabmodule extends AbstractTableModel { Vector list; public frandtabmodule(Vector frand_list ) { this.list = frand_list; } @Override public C

我有一个带有自定义模型、自定义CellEditor和CellRenderer的JTable,我想在这个表中删除和添加数据

我该怎么做

我的型号:

public class frandtabmodule extends AbstractTableModel {
  Vector list;

  public frandtabmodule(Vector frand_list ) {
    this.list = frand_list;
  }


    @Override
  public Class getColumnClass(int columnIndex) { return Frand.class; }
    @Override
    public int getColumnCount() { return 1; }
    @Override
    public String getColumnName(int columnIndex) { return " "; }
    @Override
    public int getRowCount() { return (list == null) ? 0 : list.size(); }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        int i =0 ;
        System.out.println(" raw"+rowIndex+"   clumn"+columnIndex
                +"/n -------------------------------------------"+i++);
     return (list == null) ? null : list.get(rowIndex);


    }




    @Override
    public boolean isCellEditable(int columnIndex, int rowIndex) { return true; }


    @Override
    public void fireTableRowsDeleted(int firstRow, int lastRow) {

        this.list.remove(firstRow);
        this.fireTableDataChanged();
    }
}
我的手机编辑器和手机渲染器:

public class renderediter extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
  //Clientdef1 clientdef ;


  Frand list;

  public renderediter(){
   //clientdef = new Clientdef1();
  }

  /*private void updateData(Frand feed, boolean isSelected, JTable table) {
    this.feed = feed;

    clientdef.setconncted(feed.iscon);
    clientdef.name.setText(feed.name);
    if (isSelected) {
      clientdef.setBackground(table.getSelectionBackground());
    }else{
      clientdef.setBackground(table.getSelectionForeground());
    }
  }*/

    @Override
  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {
   Frand frad = (Frand)value;

   System.err.println("-------------------------\n f1 called\n ------------------");
    //updateData(feed, true, table);

     frad.def.setBackground(table.getSelectionBackground());

    return frad.def;
  }

    @Override
  public Object getCellEditorValue() {
    return null;
  }

    @Override
  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {
    Frand frad = (Frand)value;
   // updateData(feed, isSelected, table);
     if (isSelected) {
      frad.def.setBackground(table.getSelectionBackground());
    }
     else{
      frad.def.setBackground(Color.white);
    }
    return frad.def;
  }
}
contact_tab = new javax.swing.JTable();
this.module = new frandtabmodule(client.frands);
contact_tab.setModel(module);
contact_tab.setDefaultEditor(Frand.class, new renderediter());
contact_tab.setDefaultRenderer(Frand.class, new renderediter());
contact_tab.setRowHeight(45);
jsp_contact.add(contact_tab);
jsp_contact.repaint();
jsp_contact.revalidate();
contact_tab.setColumnSelectionAllowed(true);
表格创建:

public class renderediter extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
  //Clientdef1 clientdef ;


  Frand list;

  public renderediter(){
   //clientdef = new Clientdef1();
  }

  /*private void updateData(Frand feed, boolean isSelected, JTable table) {
    this.feed = feed;

    clientdef.setconncted(feed.iscon);
    clientdef.name.setText(feed.name);
    if (isSelected) {
      clientdef.setBackground(table.getSelectionBackground());
    }else{
      clientdef.setBackground(table.getSelectionForeground());
    }
  }*/

    @Override
  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {
   Frand frad = (Frand)value;

   System.err.println("-------------------------\n f1 called\n ------------------");
    //updateData(feed, true, table);

     frad.def.setBackground(table.getSelectionBackground());

    return frad.def;
  }

    @Override
  public Object getCellEditorValue() {
    return null;
  }

    @Override
  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {
    Frand frad = (Frand)value;
   // updateData(feed, isSelected, table);
     if (isSelected) {
      frad.def.setBackground(table.getSelectionBackground());
    }
     else{
      frad.def.setBackground(Color.white);
    }
    return frad.def;
  }
}
contact_tab = new javax.swing.JTable();
this.module = new frandtabmodule(client.frands);
contact_tab.setModel(module);
contact_tab.setDefaultEditor(Frand.class, new renderediter());
contact_tab.setDefaultRenderer(Frand.class, new renderediter());
contact_tab.setRowHeight(45);
jsp_contact.add(contact_tab);
jsp_contact.repaint();
jsp_contact.revalidate();
contact_tab.setColumnSelectionAllowed(true);
我所尝试的:

public class renderediter extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
  //Clientdef1 clientdef ;


  Frand list;

  public renderediter(){
   //clientdef = new Clientdef1();
  }

  /*private void updateData(Frand feed, boolean isSelected, JTable table) {
    this.feed = feed;

    clientdef.setconncted(feed.iscon);
    clientdef.name.setText(feed.name);
    if (isSelected) {
      clientdef.setBackground(table.getSelectionBackground());
    }else{
      clientdef.setBackground(table.getSelectionForeground());
    }
  }*/

    @Override
  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {
   Frand frad = (Frand)value;

   System.err.println("-------------------------\n f1 called\n ------------------");
    //updateData(feed, true, table);

     frad.def.setBackground(table.getSelectionBackground());

    return frad.def;
  }

    @Override
  public Object getCellEditorValue() {
    return null;
  }

    @Override
  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {
    Frand frad = (Frand)value;
   // updateData(feed, isSelected, table);
     if (isSelected) {
      frad.def.setBackground(table.getSelectionBackground());
    }
     else{
      frad.def.setBackground(Color.white);
    }
    return frad.def;
  }
}
contact_tab = new javax.swing.JTable();
this.module = new frandtabmodule(client.frands);
contact_tab.setModel(module);
contact_tab.setDefaultEditor(Frand.class, new renderediter());
contact_tab.setDefaultRenderer(Frand.class, new renderediter());
contact_tab.setRowHeight(45);
jsp_contact.add(contact_tab);
jsp_contact.repaint();
jsp_contact.revalidate();
contact_tab.setColumnSelectionAllowed(true);
添加:
client.frands.add(newfrand())

删除:
client.frands.remove(frand)


如果我从表中选择了单元格,但希望动态工作,则此操作有效。

不要覆盖中的
fireTableRowsDeleted()
或相关方法。相反,实现自己的方法来
addRow()
removeow()
,等等。作为指导;本文还研究了一个相关的例子