Java JTable不显示对象[][]数据

Java JTable不显示对象[][]数据,java,arrays,swing,file-io,jtable,Java,Arrays,Swing,File Io,Jtable,我需要一些关于JTable的帮助。我正在尝试从“Contact.txt”文件中读取数据,并用这些数据填充我的表。我可以通过添加到对象[][]2D数组来正确地从文件中获取数据,没有任何问题。当我尝试将此对象数组添加到表中时,不会发生任何事情。 对不起,我的英语不好 Contacts.txt文件包括“Name”、“LastName”、“Phone Num”、“Email”等 这个类读取文本并将其添加到对象: public class ReadFromText { public boolean Re

我需要一些关于JTable的帮助。我正在尝试从“Contact.txt”文件中读取数据,并用这些数据填充我的表。我可以通过添加到对象[][]2D数组来正确地从文件中获取数据,没有任何问题。当我尝试将此对象数组添加到表中时,不会发生任何事情。 对不起,我的英语不好

Contacts.txt文件包括“Name”、“LastName”、“Phone Num”、“Email”等

这个类读取文本并将其添加到对象:

public class ReadFromText {

public boolean ReadTable(Object [][] data) {

    boolean status = false;

    File file = new File("/Users/MacbookPro/Documents/Contacts.txt");
    BufferedReader bf = null;
    FileReader fileReader = null;
    try {
        fileReader = new FileReader(file);
        bf = new BufferedReader(fileReader);

        String textLine = null;
        String [] text = null;

        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < 4; j++) {
                while ((textLine = bf.readLine()) != null) {
                    text = textLine.split("    ");
                    data[i][j] = text[j];
                    status = true;
                    System.out.println(data[i][j]);
                }
            }
        }
        bf.close();

    } catch (IOException e) {
        System.err.println(e.getMessage());
    }
    return status;
}
}
它返回“OK”并从

但是JTable是空的!!!:从侧面看


我希望任何人都能帮助我。谢谢大家我希望这个答案能帮助你找到问题所在。这也意味着要证明发布的重要性,如下所示:

mport java.awt.Color; 导入java.awt.Dimension; 导入javax.swing.JFrame; 导入javax.swing.JScrollPane; 导入javax.swing.JTable; 导入javax.swing.table.DefaultTableModel

public class TestTable extends JFrame  {

    public TestTable() {

        super("Main");
        setSize(400, 300);

        Object [][]datas = new Object[][]{
            {"A1", "A2","A3","A4"},
            {"B1", "B2","B3","B4"}
        };

        Object[] columNames = {"Name","LastName","Phone Num","Email"};
        DefaultTableModel    model = new DefaultTableModel(datas, columNames );
        JTable table = new JTable(model);
        table.setBackground(new Color(245, 245, 245));
        table.setRowHeight(25);
        table.setMinimumSize(new Dimension(60, 20));
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

        add(new JScrollPane(table));

        setVisible(true);
    }

    public static void main(String[] args) {
        new TestTable();
    }
}
MCVE不仅可以帮助您获得更好、更快的响应,在许多情况下,如本例中,它还可以帮助您确定问题并自己解决问题。 去除所有对重现问题不必要的东西,帮助你(以及试图帮助你的人)专注于问题所在。 在本例中,您可以看到消除输入部分后,
JTable
工作正常。

我希望这个答案能帮助你找到问题所在。这也意味着要证明发布的重要性,如下所示:

mport java.awt.Color; 导入java.awt.Dimension; 导入javax.swing.JFrame; 导入javax.swing.JScrollPane; 导入javax.swing.JTable; 导入javax.swing.table.DefaultTableModel

public class TestTable extends JFrame  {

    public TestTable() {

        super("Main");
        setSize(400, 300);

        Object [][]datas = new Object[][]{
            {"A1", "A2","A3","A4"},
            {"B1", "B2","B3","B4"}
        };

        Object[] columNames = {"Name","LastName","Phone Num","Email"};
        DefaultTableModel    model = new DefaultTableModel(datas, columNames );
        JTable table = new JTable(model);
        table.setBackground(new Color(245, 245, 245));
        table.setRowHeight(25);
        table.setMinimumSize(new Dimension(60, 20));
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

        add(new JScrollPane(table));

        setVisible(true);
    }

    public static void main(String[] args) {
        new TestTable();
    }
}
MCVE不仅可以帮助您获得更好、更快的响应,在许多情况下,如本例中,它还可以帮助您确定问题并自己解决问题。 去除所有对重现问题不必要的东西,帮助你(以及试图帮助你的人)专注于问题所在。 在本例中,您可以看到消除输入部分后,
JTable
工作正常。

从文件中读取数据的代码错误。想一想。以值0开始外部循环,然后以值0开始内部循环,然后使用while循环读取整个文件

您希望您的逻辑读取一行数据,拆分该行并添加数据,然后将数据添加到数组中。所以逻辑应该是这样的:

int row = 0;

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");

    for (int i = 0; i < text.length; i++)
    {
         data[row][i] = text[i];
    }

    row++
}
Vector data = new Vector();

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");
    Vector row = new Vector();

    for (int i = 0; i < text.length; i++)
    {
         row.addElement( text[i] );
    }
}
int行=0;
而((字符串textLine=bf.readLine())!=null)
{
String text=textLine.split(“”);
for(int i=0;i
但是,您不应该使用数组来保存数据。永远不要硬编码数据结构的大小,因为它不允许添加新数据。相反,您应该使用向量来读取数据。那么,你有10行数据或100行数据就无关紧要了

使用这种方法,代码将类似于:

int row = 0;

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");

    for (int i = 0; i < text.length; i++)
    {
         data[row][i] = text[i];
    }

    row++
}
Vector data = new Vector();

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");
    Vector row = new Vector();

    for (int i = 0; i < text.length; i++)
    {
         row.addElement( text[i] );
    }
}
矢量数据=新矢量();
而((字符串textLine=bf.readLine())!=null)
{
String text=textLine.split(“”);
向量行=新向量();
for(int i=0;i

因此,您需要更改方法以返回数据向量。您还需要更改要添加到向量的“columnNames”,以便使用这两个向量创建TableModel。

从文件读取数据的代码错误。想一想。以值0开始外部循环,然后以值0开始内部循环,然后使用while循环读取整个文件

您希望您的逻辑读取一行数据,拆分该行并添加数据,然后将数据添加到数组中。所以逻辑应该是这样的:

int row = 0;

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");

    for (int i = 0; i < text.length; i++)
    {
         data[row][i] = text[i];
    }

    row++
}
Vector data = new Vector();

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");
    Vector row = new Vector();

    for (int i = 0; i < text.length; i++)
    {
         row.addElement( text[i] );
    }
}
int行=0;
而((字符串textLine=bf.readLine())!=null)
{
String text=textLine.split(“”);
for(int i=0;i
但是,您不应该使用数组来保存数据。永远不要硬编码数据结构的大小,因为它不允许添加新数据。相反,您应该使用向量来读取数据。那么,你有10行数据或100行数据就无关紧要了

使用这种方法,代码将类似于:

int row = 0;

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");

    for (int i = 0; i < text.length; i++)
    {
         data[row][i] = text[i];
    }

    row++
}
Vector data = new Vector();

while ((String textLine = bf.readLine()) != null) 
{
    String text = textLine.split("    ");
    Vector row = new Vector();

    for (int i = 0; i < text.length; i++)
    {
         row.addElement( text[i] );
    }
}
矢量数据=新矢量();
而((字符串textLine=bf.readLine())!=null)
{
String text=textLine.split(“”);
向量行=新向量();
for(int i=0;i

因此,您需要更改方法以返回数据向量。您还需要更改“columnNames”添加到向量中,以便您可以使用这两个向量创建TableModel。

打印数据时得到了什么?@c0der谢谢您的重播,但我尝试了。@c0der可以看到第二张图片的结果打印数据时得到了什么?@c0der谢谢您的重播,但我尝试了。@c0der可以看到第二张图片的结果谢谢replay.My populate 2d array中的问题,当((text=bf.readLine())!=){}从2个循环中移动时,我得到如下结果:[Ljava.lang.String;@3ede05c0我知道问题存在。这就是为什么我发布了注释“打印数据时会得到什么?”我得到正确的数据一切正常,但表仍然是空的。在那之后,我们解决了@camickr:)先生的一半问题。现在只有第一列填充,需要解决这个问题。可能需要对不同的正则表达式使用split??你对此有什么想法吗?“只填充第一列”THANX“我得到正确的数据”-我对此表示怀疑。1.在模型使用之前打印出来。你可能会感到惊讶。2.如果数据是100%检查的,请发布另一个问题