2

我有一个用于制作表格并对在那里输入的数据进行排序的代码。如果我想使用按钮添加一些操作来添加行而不是填充数据并且也可以删除行怎么办。这是我的代码:

public class TableSortDemo extends JPanel {
    private boolean DEBUG = false;

    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = {"Nama",
                                        "NIM",
                                        "IPK"};
        private Object[][] data = {
        {"", new Integer(0),new Double(0)}
        };

        public boolean isCellEditable(int row, int col) {
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }
        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data[row][col] = value;

        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
            }
        }
    }
4

2 回答 2

1
  1. 对于基于 AbstractTableModel 的 JTable 需要覆盖

  2. 我会使用 DefaultTableModel (请参阅我的帖子,一切都可以变得多么简单),强烈推荐 newbee

  3. 一切都在JTable 教程中进行了描述,其余部分(正确地)在具体的 API 中

于 2013-05-21T11:12:18.927 回答
0

首先,为什么不使用ArrayList来表示在行中显示的实体。代替 :

private Object[][] data = {
{"", new Integer(0),new Double(0)}
};

有类似的东西:

private ArrayList<Thing> myThings;

它让事情变得简单多了。

如果要添加或删除行,只需向表模型添加两个方法,例如:

public void addThing(Thing t) {..}
public void removeThing(Thing t) {..}

然后用fireTableDateChanged()跟进;

于 2013-05-21T11:05:51.340 回答