Java 将矩阵转换为JTable

Java 将矩阵转换为JTable,java,swing,file,matrix,jtable,Java,Swing,File,Matrix,Jtable,我需要用静态2D数组填充JTable。我为JTable创建了这个模型: 首先,我需要知道这段代码是否真的像我想的那样,将数据存储在矩阵中,就像它存储在文本文件中一样 第二,我真的不知道getValueAt函数有什么问题 此外,我还注意到了其他一些事情。这部分肯定有问题: while ((line = br.readLine()) != null) { StringTokenizer st1 = new StringTokenizer(l

我需要用静态2D数组填充JTable。我为JTable创建了这个模型:

首先,我需要知道这段代码是否真的像我想的那样,将数据存储在矩阵中,就像它存储在文本文件中一样

第二,我真的不知道getValueAt函数有什么问题

此外,我还注意到了其他一些事情。这部分肯定有问题:

  while ((line = br.readLine()) != null) {
                            StringTokenizer st1 = new StringTokenizer(line, " ");
                            while (st1.hasMoreTokens())
                            {mat[i][j]=Float.valueOf(st1.nextToken()).floatValue(); 
                                                        j++;
                                                       if (j==13) {i++;j=1;}
                            }  

它从文件中读取数据,但没有按应有的方式存储数据。基本上,它引入了一种转变,从第二行开始。例如,应该存储在[1][0]中的内容位于[1][1],[2][0]位于[2][2]……等

问题是你写了:

public void InsertMatToJTable()
public InsertMatToJTable()
但你应该写下:

public void InsertMatToJTable()
public InsertMatToJTable()
请注意,第二个代码段中没有空格

您声明了一个名为InsertMatToJTable的方法,而不是同名类的构造函数。因此,当您调用新的InsertMatToJTable时,您将调用默认的无参数构造函数,并且您的代码将永远不会运行,使矩阵保持非斜体,因此出现NullPointerException

为了避免这些类型的打字错误,请在代码中添加日志,并使用调试器查找问题

下面是一个工作代码的示例演示

import java.util.Random;

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

public class TestTables {

    private static final int ROWS = 270;
    private static final String titre[] = { "age real", "sex real", "chest real", "resting_blood_pressure real", "serum_cholestoral real",
            "fasting_blood_sugar real", "resting_electrocardiographic_results real", "maximum_heart_rate_achieved real",
            "exercise_induced_angina real", "oldpeak real", "slope real", "number_of_major_vessels real", "thal real", "class" };

    public static class InsertMatToJTable extends AbstractTableModel {

        private float[][] matrice_normalise;

        public InsertMatToJTable(float[][] matrice_normalise) {
            this.matrice_normalise = matrice_normalise;
        }

        @Override
        public int getRowCount() {
            return matrice_normalise.length;
        }

        @Override
        public int getColumnCount() {
            return titre.length;
        }

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

        @Override
        public String getColumnName(int columnIndex) {
            return titre[columnIndex];

        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame(TestTables.class.getSimpleName());
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                float[][] matrix = new float[ROWS][titre.length];
                Random random = new Random();
                for (int i = 0; i < matrix.length; i++) {
                    for (int j = 0; j < matrix[i].length; j++) {
                        matrix[i][j] = random.nextFloat() * 100;
                    }
                }
                InsertMatToJTable model = new InsertMatToJTable(matrix);
                JTable table = new JTable(model);
                JScrollPane scroll = new JScrollPane(table);
                frame.add(scroll);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

如果这是我的代码,我的表模型类中就不会有文件读取代码。这两项功能需要分开。我还要确保测试我的文件读取是独立工作的,并且会从Swing事件线程读取文件。getRowCount必须是错误的。。行数为270。元素的数量是270*13…我会记住这一点,气垫船。路易斯,这只是我在做的一些测试,只是为了确定。现在分离关注点的一个主要原因是,你可以分离代码的各个部分,看看哪些有效,哪些无效。调试一个小程序要比调试一个大程序容易得多。老实说,我当时很忙,对细节没有给予足够的注意。非常感谢。@El HadjChikhaoui读取文件的代码中的问题是将j重置为1而不是0。替换j=1;对于j=0,这是我首先做的。但是我从rowcount或columncount方法中得到了一个“越界”错误。@El HadjChikhaoui在我的示例中看看我是如何做到这一点的,并尝试执行类似的操作。