Java 自定义TableModel Swing中的removeRow()方法

Java 自定义TableModel Swing中的removeRow()方法,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我有一个JTable,它是使用我创建的自定义TableModel填充的。我有另一个JTable,可以从第一个JTable添加行。我可以将该行添加到新的JTable没有问题,但是在将该行添加到新的JTable时,我需要从第一个JTable中删除该行。不幸的是,removeRow()只是DefaultTableModel的一个方法,我已经检查了它的源代码,但它没有显示出来 提前谢谢 这是我的自定义表格模型: /* * To change this template, choose Tools |

我有一个JTable,它是使用我创建的自定义TableModel填充的。我有另一个JTable,可以从第一个JTable添加行。我可以将该行添加到新的JTable没有问题,但是在将该行添加到新的JTable时,我需要从第一个JTable中删除该行。不幸的是,removeRow()只是DefaultTableModel的一个方法,我已经检查了它的源代码,但它没有显示出来

提前谢谢

这是我的自定义表格模型:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ttp;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.*;
import java.util.*;

/**
 *
 * @author ericrea
 */

/**creates the model for the accounts table*/
public class tableModel extends AbstractTableModel {

    //private int rowCount = 0;
    private static final int COLUMN_COUNT = 3;
    private Conceptual_Package pp;
    Conceptual_Package j = GUIpos.i;



    public tableModel(Conceptual_Package pp) {
        this.pp = pp;

    }

    /**sets the column headers*/
    public String getColumnName(int i){
        switch (i) {
            case 0:
                return "Sec";
            case 1:
                return "Row";
            case 2:
                return "Seat";
            default:
                return null;
        }
    }

    /**figures out how many rows the model needs*/
    public int getRowCount() {
        int h = 0;
        try {
            h = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).size();
        } catch (DataException ex) {
            Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
        }

        return h;
    }

    /**Figures out number of columns*/
    public int getColumnCount() {
        return COLUMN_COUNT;

    }

    /**gets the account information from the Physical_Package*/
    public Object getValueAt(int rowIndex, int columnIndex) {
        String a = null;
        String b = null;
        String c = null;

        try {
            Physical_Package pp = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(rowIndex);
            a = pp.getVenueSeat().getRowInVenue().getSectionInVenue().getSectionNumber();
            b = pp.getVenueSeat().getRowInVenue().getRowNumber();
            c = pp.getVenueSeat().getSeatNumber();

            } catch (DataException ex) {
            Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
        }
            switch (columnIndex) {
                case 0:
                    return a.trim();
                case 1:
                    return b.trim();
                case 2:
                    return c.trim();
                default:
                    return null;
            }

    }

    /**gets the right account for the Physical_Package*/
    public Physical_Package getCPackage(int index){
        Physical_Package d = null;
        try {
            Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(index);
        } catch (DataException ex) {
            Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
        }

        return d;
    }

    public void removeRow(int index){

    }
//write in mainFrame, in panel
//ValueChanged{
//    get the selected name
//    Physical_Packages.get()
//    namefield.settext(pp.getname);
//
//}
}
不幸的是,removeRow()只是DefaultTableModel的一个方法

看看DefaultTableModel的源代码。这两种方法都是实现的,因此您可以使用代码和代码的示例。关键是“fireXXX”方法。调用这些方法将通知表模型已更改,以便表可以重新绘制自身

从您以前的问题(您刚刚删除了该问题)中,您可以声明“我可以将该行添加到新的jTable中,没有问题,”

通过查看您的代码(在您删除问题之前),我有以下评论:

在我看来,您正在创建一个全新的表格模型。这与向现有模型中添加行不同。这似乎不是一个很好的解决方案。相反,您需要创建一个addRow(…)


如果您发现DefaultTableModel中的代码过于混乱,那么下面是一些代码,展示了我如何实现addRow(…)和removeRow(…)方法。看见该类显示了每个方法所使用的正确fireXXX方法。

好的,非常感谢,我也明白了添加部分的含义。我会告诉你事情的进展。谢谢看看你的RowTable模型,我想我可能会用它来代替我自己的。谢谢BeanTableModel链接中的JButtonTableModel示例显示了使用实现的getValueAt()和setValueAt()方法创建自己的TableModel的最简单方法。