【问题标题】:populate a 'JTable' with values from a '.txt' file使用“.txt”文件中的值填充“JTable”
【发布时间】:2015-09-09 07:32:11
【问题描述】:

我是 java 新手,我有一个像这样的文本文件

0784879541|P. K.|Tharindu|745874654v|Colombo|
0714786542|H. R.|Kamal|654124784v|Colombo|
0114784544|H. P.|Gamage|6847654127v|Kandy|

我想用这个文本文件中的数据填充我的“jTable”。下面是我到目前为止的代码,它不起作用。当我执行程序时,表格上什么也没有显示。

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    String line = null;
    DefaultTableModel dtm = (DefaultTableModel) PhoneBookTable.getModel();
    
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        StringTokenizer st1 = new StringTokenizer(br.readLine(), "|");
        while (st1.hasMoreTokens()) {
            columns.addElement(st1.nextToken());
        }
        while ((line = br.readLine()) != null) {
            StringTokenizer st2 = new StringTokenizer(line, "|");
            while (st2.hasMoreTokens()) {
                data.addElement(st2.nextToken());
            }
        }
        br.close();
        dtm.addRow(new Object[]{columns, data});//add here 
    } catch (Exception e) {
        e.printStackTrace();
    }

} 

有人可以帮帮我吗?

【问题讨论】:

  • 我刚刚从Vector data; Vector columns;更新到Vector data = new Vector(); Vector columns = new Vector();
  • 那么你的问题解决了吗?
  • 数据需要分离并跨表显示。但我得到的是它在单个单元格中显示整行日期。
  • 查看我的更新答案。
  • @FastSnail 真棒,这行得通。感谢您的帮助。非常非常非常感谢。

标签: java swing file-io jtable stringtokenizer


【解决方案1】:

你需要把你的改成这样。每次读取新行时都需要重置向量data = new Vector();,否则它包含第一行+第二行+等等。你也可以调用dtm.setRowCount(0);来避免空初始行。你只需要添加行你的评论问题[单元格包含很多列]是因为 dtm.addRow(new Object[]{columns, data}) 改用dtm.addRow(data);,问题将得到解决

代码

private void formWindowOpened(java.awt.event.WindowEvent evt) {
        String line = null;
        DefaultTableModel dtm = (DefaultTableModel) PhoneBookTable.getModel();

        try {
            BufferedReader br = new BufferedReader(new FileReader(file));

            while ((line = br.readLine()) != null) {
                data = new Vector();// this is important
                StringTokenizer st1 = new StringTokenizer(line, "|");
                while (st1.hasMoreTokens()) {
                    String nextToken = st1.nextToken();
                    data.add(nextToken);
                    System.out.println(nextToken);

                }
                System.out.println(data);
                dtm.addRow(data);//add here 
                System.out.println(".................................");
            }

            br.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

【讨论】:

  • 将每一行(逐行)分别添加到 XxxTableModel 是再安全不过了
  • 试过了。仍然遇到同样的问题。什么都没有显示。
  • 等一下有问题
  • @TharinduKuruppu cheak 更新了一个。但是您必须在读取文件后构造 jtable,因为在读取文件之前您不知道列标题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2017-12-29
相关资源
最近更新 更多