簡體   English   中英

自定義TableModel Swing中的removeRow()方法

[英]removeRow() method in custom TableModel Swing

我有一個使用創建的自定義TableModel填充的JTable。 我還有另一個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中”

通過查看您的代碼(刪除問題之前),我有以下評論:

在我看來,就像您正在創建一個全新的TableModel一樣。 這與在現有模型中添加一行不同。 這似乎不是一個很好的解決方案。 相反,您需要創建一個addRow(...)

如果您在DefaultTableModel中發現代碼過於混亂,那么下面的代碼說明了我如何實現addRow(...)和removeRow(...)方法。 請參見行表模型 該類顯示適用於每個方法的正確fireXXX方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM