使用文本文件中的值填充“JTable”

时间:2015-06-23 14:44:35

标签: java swing jtable stringtokenizer

我有一个像这样的文本文件

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]

在第一行第二列

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

2 个答案:

答案 0 :(得分:0)

您只需拨打addRow一次,因此表格模型中只会添加一行。 您需要在文件读取循环中移动该语句。

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

答案 1 :(得分:0)

终于找到了错误。它应该像

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

}