4

DefaultTableModel を拡張するテーブル モデルを作成しました。

public class TableModel extends DefaultTableModel {
List<VariableDetails> data;
public AttachedVariableTableModel(){
super();        
this.data=Collections.synchronizedList(new ArrayList<VariableDetails>());
}

//method for adding rows
public void addRow(VariableDetails varDetails){

    this.data.add(varDetails);
    fireTableRowsInserted(this.data.size()-1,this.data.size()-1);
    }

}

すでにデータが含まれているテーブルに行を追加しようとしました。

tModel.addRow(new  VariableDetails());

ただし、行を追加することはできません。例外やエラーはありません。ここで実際に何が間違っていますか?どうすればこれを解決できますか? 前もって感謝します。

4

2 に答える 2

2
  1. なぜ理由があるのかsuper();

  2. DefaultTableModel追加しObject[]たりVector

  3. AbstractTableModelではなくをオーバーライドする必要がDefaultTableModelあり、すべてのget/setメソッドをオーバーライドする必要fireXxxXxx()があります。JTable

  4. リスト テーブル モデルまたは行テーブル モデルで開始できます

于 2012-11-08T07:45:12.663 に答える
0

それがどのように機能するかを理解するために、完全なテーブルモデルの例をお勧めします。また、リストをデータとして使用します。最も重要なことは、データを格納するために独自の変数を使用するようにAbstractTableModelを拡張する必要があることです。ソース コードの完全なサンプルを次に示します。

import java.util.ArrayList;
import java.util.List;

    import javax.swing.table.AbstractTableModel;

    public class MouseClickTableModel extends AbstractTableModel {
        /**
         * 
         */
        private static final long serialVersionUID = -1807522184370383957L;

        private final String[] columnNames = { "Sr", "X", "Y", "Delay (ms)",
                "Comment" };

        public final Class[] mColTypes = { Integer.class, Integer.class,
                Integer.class, Integer.class, String.class };

        private final List<MouseClick> data;

        public MouseClickTableModel(){
            data = new ArrayList<MouseClick>(10);
        }

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.size();
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            final MouseClick currentRow = (MouseClick) data.get(row);

            switch (col) {
            case 0:
                return currentRow.getSequNb();
            case 1:
                return currentRow.getXcoo();
            case 2:
                return currentRow.getXycoo();
            case 3:
                return currentRow.getDelay();
            case 4:
                return currentRow.getComment();
            }

            return new String();
        }

        public Class getColumnClass(int c) {
            return mColTypes[c];
        }

        /*
         * Don't need to implement this method unless your table's editable.
         */
        public boolean isCellEditable(int row, int col) {
            return false;
        }

        public void updateRow(Object value, int row, int col) {

        }

        /*
         * Don't need to implement this method unless your table's data can change.
         */
        @Override
        public void setValueAt(Object value, int row, int col) {
            MouseClick currentRow = null;
            if (row >= data.size()) {
                // new data
                currentRow = new MouseClick();
                data.add(0, currentRow);
            }
            // update row
            else {
                currentRow = (MouseClick) data.get(row);
            }

            switch (col) {
            case 0:
                currentRow.setSequNb(((Integer) value).intValue());
                break;
            case 1:
                currentRow.setXcoo(((Integer) value).intValue());
                break;
            case 2:
                currentRow.setXycoo(((Integer) value).intValue());
                break;
            case 3:
                currentRow.setDelay(((Integer) value).intValue());
                break;
            case 4:
                currentRow.setComment(((String) value).toString());
                break;
            }
            // update
            fireTableCellUpdated(row, col);
        }

        public MouseClick getData(int row) {
            return data.get(row);
        }

        public void addMouseClick(MouseClick mc) {
            insertMouseClick(getRowCount(), mc);
        }

        public void insertMouseClick(int row, MouseClick mc) {
            data.add(row, mc);
            fireTableRowsInserted(row, row);
        }

        public void removeMouseClick(int row) {
            data.remove(row);
            fireTableRowsDeleted(row, row);
        }

    }

次に、UI デザインでモデルを更新するだけです。

JTable table = new JTable(new MouseClickTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
MouseClickTableModel model = getTable().getModel());
model.insertMouseClick(0, new MouseClick(0, Integer.valueOf(xValue),  Integer.valueOf(yValue), 2000, "comment"));
于 2015-04-29T14:40:48.153 に答える