【问题标题】:populate a 'JTable' with values from a text file [duplicate]使用文本文件中的值填充“JTable”[重复]
【发布时间】:2015-06-23 14:44:35
【问题描述】:

我有一个这样的文本文件

0786160384|P. K.|Tharindu|912921549v|Colombo|
0711495765|P. K.|Gamini|657414589v|Colombo|
0114756199|H. P.|Weerasigha|657895478v|Kandy|

每个|分隔一个数据。我想在jTable 中显示此文件中的数据。以下是我目前的代码。

public class PrintGUI extends javax.swing.JFrame {

File file, tempFile;
FileReader fileReader;
FileWriter fileWriter;
ArrayList ClientList;
Vector data = new Vector();
Vector columns = new Vector();

public PrintGUI() {
    initComponents();
    this.setIconImage(new ImageIcon(getClass().getResource("/Images/icon.png")).getImage());
    file = new File("C:\\Users\\Tharindu\\Documents\\NetBeansProjects\\Geo phonebook\\phonebook.txt");
    tempFile = new File("C:\\Users\\Tharindu\\Documents\\NetBeansProjects\\Geo phonebook\\tempphonebook.txt");
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    PhoneBookTable.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {

        },
        new String [] {
            "Phone No", "First Name", "Last Name", "NIC", "City"
        }
    ) 
}                                                    

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});
    } catch (Exception e) {
        e.printStackTrace();
    }

}

问题是当我运行程序时,它会在 .txt 文件中的文本上显示一整行,而不是每列显示一个数据。 更具体地说,它显示了整行

 [0786160384, P. K., Tharindu, 912921549v, Colombo]

在第一行第一列和

[0711495765, P. K., Gamini, 657414589v, Colombo, 0114756199, H. P., Weerasigha, 657895478v, Kandy]

在第一行第二列

相反,我希望它在每个单元格中显示单个数据。有人可以帮忙吗?

【问题讨论】:

    标签: java swing jtable stringtokenizer


    【解决方案1】:

    你只调用一次addRow,所以当然只有一行添加到表模型中。 您需要将该语句移到文件读取循环中。

    您从文件中读取的每一行都对应于表中的一行。因此,您需要在每次阅读一行时调用addRow,并使用该行的内容调用它。

    【讨论】:

    • 我是 Java 新手。你能告诉我这是怎么做到的吗?
    • 没有。您已经有了文件读取循环。你只需要移动一些语句。
    【解决方案2】:

    终于找到错误了。应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多