【问题标题】:Populate JTable with array of integers用整数数组填充 JTable
【发布时间】:2017-01-02 18:04:17
【问题描述】:

我有一个多维整数数组 (int[][] model = new int[9][9]) 和一个表 (JTable table = new JTable(9, 9)

如何使用model 的值填充表格?

我试过了

// Populate JTable with data from model
for (int i=0; i<9; i++) {
    this.table = this.table.addRow(this.model[i]);
}

【问题讨论】:

    标签: java arrays swing jtable


    【解决方案1】:

    您可以创建自定义TabelModel 并直接从数组中读取值:

    package com.company;
    
    import javax.swing.*;
    import javax.swing.table.AbstractTableModel;
    
    public class Main {
        public static void main(String[] args) {
            JTable table = new JTable(3, 3);
    
            final int[][] values = new int[][] {
                {1,2,3},
                {2,3,4},
                {3,4,5},
            };
    
            table.setModel(new AbstractTableModel() {
                @Override
                public int getRowCount() {
                    return 3;
                }
    
                @Override
                public int getColumnCount() {
                    return 3;
                }
    
                @Override
                public Object getValueAt(int rowIndex, int columnIndex) {
                    return values[rowIndex][columnIndex];
                }
            });
    
            JFrame frame = new JFrame();
            frame.getContentPane().add(table);
            frame.pack();
            frame.setVisible(true);
        }
    }
    

    【讨论】:

    • 谢谢,但问题是我在 actionlistener 中执行此操作,所以我收到错误 Syntax error, annotations are only available if source level is 1.5 or greater 并且我无法访问在 this.table.setModel(new AbstractTableModel() {} 之外定义的变量
    • 第一个与@Override 属性相关的错误。你真的使用低于 1.5 的 JDK 吗?第二个可以很容易地修复:只需创建从AbstractTableModel 继承的常规类并将数组传递给构造函数。
    【解决方案2】:

    JTable 适用于对象,而不是基元。

    将 int 值转换为 Integer 并将数据添加到表的 DefaultTableModel

    所以基本代码可能是这样的:

    int[][] values = new int[][]
    {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    };
    
    int columns = values[0].length;
    
    DefaultTableModel model = new DefaultTableModel(0, columns)
    {
        @Override
        public Class getColumnClass(int column)
        {
            return Integer.class; // number will be displayed right aligned
        }
    };
    
    for (int i = 0; i < values.length; i++)
    {
        int[] rowData = values[i];
        Vector<Object> row = new Vector<Object>(columns);
    
        for (int j = 0; j < rowData.length; j++)
            row.addElement( new Integer( rowData[j] ) );
    
        model.addRow( row );
    }
    
    JTable table = new JTable(model);
    

    我有一个多维整数数组

    另一种选择可能是在 Object 数组中创建数据,然后您可以这样做:

    String[] columnNames = {"A", "B", "C", "D"};
    DefaultTableModel model = new DefaultTableModel()
    {
        @Override
        public Class getColumnClass(int column)
        {
            return Integer.class;
        }
    };
    model.setDataVector(values, columnNames);
    
    JTable table = new JTable(model);
    

    【讨论】:

    • 如果我已经创建了 JTable,但只想一次更改所有值怎么办?
    • 那么你只需使用setModel(..)方法更改表的模型。或者,您使用 setRowCount(0) 从现有模型中删除所有行,然后在每一行中一次添加一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多