Метод removeRow() в пользовательской TableModel Swing

У меня есть 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);
//
//}
}

person novicePrgrmr    schedule 07.03.2011    source источник


Ответы (1)


К сожалению, removeRow() — это только метод для DefaultTableModel.

Взгляните на исходный код DefaultTableModel. Оба эти метода реализованы, поэтому вы можете использовать код и пример того, как может выглядеть ваш код. Ключ к методам "fireXXX". Вызов этих методов уведомит таблицу об изменении модели, чтобы таблица могла перерисовать себя.

Из вашего старого вопроса (который вы только что удалили) вы заявляете: «Я могу добавить строку в новый jTable без проблем»,

Глядя на ваш код (до того, как вы удалили вопрос), у меня есть следующий комментарий:

Мне кажется, что вы создаете совершенно новую TableModel. Это не то же самое, что добавить строку в существующую модель. Это не кажется очень хорошим решением. Вместо этого вам нужно создать addRow(...)

Если вы находите код в DefaultTableModel слишком запутанным, вот код, показывающий, как я реализовал методы addRow(...) и removeRow(...). См. раздел Модель таблицы строк. Класс показывает правильные методы fireXXX, которые следует использовать для каждого метода.

person camickr    schedule 07.03.2011
comment
Хорошо, большое спасибо, и я также понимаю, что вы имеете в виду с добавленной частью. Я свяжусь с вами, как все пойдет. Спасибо! - person novicePrgrmr; 07.03.2011
comment
Взглянув на вашу RowTableModel, я думаю, что могу просто использовать ее вместо своей. Спасибо! - person novicePrgrmr; 07.03.2011
comment
Пример JButtonTableModel из ссылки BeanTableModel показывает самый простой способ создания собственной TableModel с реализованными методами getValueAt() и setValueAt(). - person camickr; 07.03.2011