【问题标题】:How to add and delete table in java如何在java中添加和删除表
【发布时间】:2013-05-21 10:55:58
【问题描述】:

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

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]);
                }
            }
        }
    }

【问题讨论】:

  • 为什么不用HashMap?
  • HashMap 导致排序、在索引处插入行等问题
  • 排序不应该影响物理模型,应该虚拟完成
  • @MadProgrammer aaaaach 我真的不想赢,但我无法抗拒,其中一个 describtions here by (@Robin),另一个你可以搜索(如果我记得正确)在(@JB Nizet)的帖子中
  • @mKorbel 是的,我明白你的意思

标签: java swing jtable add


【解决方案1】:
  1. 对于基于 AbstractTableModel 的 JTable 需要覆盖

  2. 我会使用 DefaultTableModel (see my post, how easy everything could be),强烈推荐给 newbee

  3. 所有内容都在JTable tutorial 中进行了描述,其余内容(正确地)在具体 API 中

【讨论】:

    【解决方案2】:

    首先,为什么不使用 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();

    跟进

    【讨论】:

    • 从性能的角度来看,使用fireTableRowsInserted/deleted会更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2012-06-04
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多