繁体   English   中英

JTable不显示Object [] []数据

[英]JTable does not show Object [][] data

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

Contacts.txt文件包括“名称”,“姓氏”,“电话号码”,“电子邮件”。

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

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;
}
}

这部分代码来自主类

Object [][]datas = new Object[10][4];

ReadFromText r = new ReadFromText(); //new object from ReadData class
    if(r.ReadTable(datas)== true){ 
        System.out.println("OK");//just for to be sure
    }else{
        System.out.println("NO");
    }
    model = new DefaultTableModel(datas, columNames);
    table = new JTable(model);
    table.setFont(new Font("Monospaced", Font.PLAIN, 13));
    table.setBackground(new Color(245, 245, 245));
    table.setRowHeight(25);
    table.setMinimumSize(new Dimension(60, 20));
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

返回“确定”从这里检查

但是JTable是空的! :从这张图片看

我希望任何人都能帮助我。 感谢所有人

希望这个答案可以帮助您找到问题所在。 它还旨在证明发布MCVE的重要性,如下所示:

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来读取数据。 那就没关系了,您有10行数据还是100行。

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

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] );
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM