java - 动态添加数据到MyTableModel

标签 java dynamic jtable

我一直在学习java教程,我想知道是否有人可以帮助我实现一些东西。我想将数据动态实现到 Object[][] data = ... 但我不知道如何实现。我从 .xml 文件中提取信息,并将其存储在多个数组中,然后我想将其输入到 2D 数组中。

    class MyTableModel extends AbstractTableModel {
            private String[] columnNames = {"First Name",
                                            "Last Name",
                                            "Sport",
                                            "# of Years",
                                            "Vegetarian"};
// Here is where I would like to pull my data and put it in.
// Assume the program does not know how many rows it needs            
private Object[][] data = {
            {"Kathy", "Smith",
             "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe",
             "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black",
             "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White",
             "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown",
             "Pool", new Integer(10), new Boolean(false)}
            };

            public final Object[] longValues = {"Jane", "Kathy",
                                                "None of the above",
                                                new Integer(20), Boolean.TRUE};

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

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

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

            public Object getValueAt(int row, int col) {
                return data[row][col];
            }

            /*
             * JTable uses this method to determine the default renderer/
             * editor for each cell.  If we didn't implement this method,
             * then the last column would contain text ("true"/"false"),
             * rather than a check box.
             */
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
            }

            /*
             * Don't need to implement this method unless your table's
             * editable.
             */
            public boolean isCellEditable(int row, int col) {
                //Note that the data/cell address is constant,
                //no matter where the cell appears onscreen.
                if (col < 2) {
                    return false;
                } else {
                    return true;
                }
            }

            /*
             * Don't need to implement this method unless your table's
             * data can change.
             */
            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;
                fireTableCellUpdated(row, col);

                if (DEBUG) {
                    System.out.println("New value of data:");
                    printDebugData();
                }
            }

            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]);
                    }
                    System.out.println();
                }
                System.out.println("--------------------------");
            }
        }

最佳答案

数组的长度是固定的。我假设您使用的是 JTable(Object[][] rowData, Object[] columnNames) 构造函数。请改用 JTable(Vector rowData, Vector columnNames) 构造函数。通过这种方式,您可以动态添加元素,如 doc.oracle.com's "How to Use Tables" tutorial 中所示。 .

public class JTableCreatingByVector {
  public static void main(String args[]) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Vector<String> rowOne = new Vector<String>();
    rowOne.addElement("Row1-Column1");
    rowOne.addElement("Row1-Column2");
    rowOne.addElement("Row1-Column3");

    Vector<String> rowTwo = new Vector<String>();
    rowTwo.addElement("Row2-Column1");
    rowTwo.addElement("Row2-Column2");
    rowTwo.addElement("Row2-Column3");

    Vector<Vector> rowData = new Vector<Vector>();
    rowData.addElement(rowOne);
    rowData.addElement(rowTwo);

    Vector<String> columnNames = new Vector<String>();
    columnNames.addElement("Column One");
    columnNames.addElement("Column Two");
    columnNames.addElement("Column Three");
    JTable table = new JTable(rowData, columnNames);

    JScrollPane scrollPane = new JScrollPane(table);
    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 150);
    frame.setVisible(true);
  }
}

关于java - 动态添加数据到MyTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487530/

相关文章:

java - 第二个数组不打印

java - maven-replacer-plugin 抛出 [ERROR] 非法组引用

C#动态编译和 "Microsoft.CSharp.dll"错误

c++ - UPX 是否神奇地将二进制文件从动态链接转换为静态链接库?

java - 在JAVA中实现AbstractTableModel时出现异常?

java - 具有可扩展单元格的动态布局

java - 打印优先队列的内容

C - 动态结构数组

java - 选择行时突出显示单元格

java - 如何在 Java 中搜索子文件夹并用新数据重新绘制 jTable?