java - 如何使用 arraylist 将数据存储在 JTable 的预定义默认表模型中

标签 java swing jtable

我想在运行时将数据添加到我自己的 JTable 模型中。我的界面上有表格和添加按钮。据我了解,我无法使用二维数组来做到这一点,并且想在我的定制表模型中使用 Arraylist,但如果我使用这种类型的数据,我不知道如何创建构造函数。

static String[] columnNames = {"A", "B", "C"};
static Object data[][] = new Object[15][3];

public MyTableModel() {
   super(data, columnNames);
}

这是数据作为二维数组的构造函数,但我想使用:

ArrayList<Object[]> data = new ArrayList<Object[]>();

制作方法

最佳答案

一种方法是使用 AbstractTableModel 。这是一个例子:

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

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;

public class TestTable {

    public static class MyModel extends AbstractTableModel {

        private List<Object[]> data;
        private List<String> columnNames;

        public MyModel(List<String> columnNames, List<Object[]> data) {
            super();
            this.columnNames = columnNames;
            this.data = data;
        }

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

        @Override
        public int getColumnCount() {
            return columnNames.size();
        }

        @Override
        public String getColumnName(int column) {
            return columnNames.get(column);
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return data.get(rowIndex)[columnIndex];
        }

    }

    protected void initUI() {
        JFrame frame = new JFrame(TestTable.class.getSimpleName());
        List<String> columns = Arrays.asList("Name", "Age");
        List<Object[]> data = new ArrayList<Object[]>();
        for (int i = 0; i < 50; i++) {
            Object[] value = new Object[2];
            value[0] = "Name-" + i;
            value[1] = 12 + i;
            data.add(value);
        }
        JTable table = new JTable(new MyModel(columns, data));
        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestTable().initUI();
            }
        });
    }
}

如果您需要修改您的data List<Object[]> ,不要忘记触发适当的表事件。 AbstractTableModel已经包含它们了。

关于java - 如何使用 arraylist 将数据存储在 JTable 的预定义默认表模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13274644/

相关文章:

java - System.out 到 Windows 上的 Unix 行结尾

java - 主动渲染和 EDT(Swing 动画)

java - 如何从 JTextField 获取用户输入?

Netbean GUI selectall 操作中的 Java 弹出菜单

java - 如何将一维数组添加到二维数组?

java - Swing JTable - 以与选定行的其余部分不同的颜色突出显示选定的单元格?

java - 将 JTable 用于 JTree 单元格编辑器

java - 如何在测试 android 应用程序时隐藏 LeanFT 中的键盘?

java - Java中如何List复制Set?

java - 为什么我的列表没有填充到 Android Studio 中?