-2

这是我的文本文件的样子:将其复制到记事本中并在 SSCCE 中打开

名字:丹
姓氏: rmadakkk
电话号码:(348) 794-7329
电子邮件:leo@live.ca

更新:这就是我所看到的。

错误的

这就是我想要的。

对

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.*;

public class Main extends JFrame {

    private JTextField Searchtextfield;
    private JTable table;
    private JTextField Firstnametext;
    private JTextField lastnametext;
    private JTextField Phonenumbertext;
    private JTextField Emailtext;
    BufferedReader reader;
    DefaultTableModel tableModel;

    public Main() throws Exception {

        getContentPane().setLayout(null);
        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);

        tabbedPane.setBounds(0, 32, 650, 365);
        getContentPane().add(tabbedPane);

        JPanel MainPanel = new JPanel();
        MainPanel.setBackground(Color.LIGHT_GRAY);
        tabbedPane.addTab("Main", null, MainPanel, null);
        MainPanel.setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 42, 604, 217);
        MainPanel.add(scrollPane);

        table = new JTable();

        scrollPane.setViewportView(table);

        String columns[] = {"First Name", "Last Name", "Phone Number", "Email"};
        tableModel = new DefaultTableModel(0, 4);
        tableModel.setColumnIdentifiers(columns);
        table.setModel(tableModel);

        JButton button = new JButton("Open Txt");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                String line;
                JFileChooser fileload = new JFileChooser();


                if (fileload.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) {
                    try {
                        File file = fileload.getSelectedFile();
                        FileInputStream fis = new FileInputStream(file);

                        reader = new BufferedReader(new FileReader(file));

                        while ((line = reader.readLine()) != null) {
                            tableModel.addRow(line.split(": "));
                        }
                        reader.close();
                    } catch (IOException e10) {
                        JOptionPane.showMessageDialog(null, "Buffered Reader issue.");
                    }
                }
            }
        });
        button.setBounds(160, 11, 129, 23);
        MainPanel.add(button);
    }

    public static void main(String[] args) throws Exception {
        Main frame = new Main();
        frame.setTitle("Phone Book App");
        frame.setSize(640, 400);
        frame.setLocationRelativeTo(null); // Center the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
4

1 回答 1

1

根据您的代码段判断,txt 文件在一行中包含表中每一列的值,因此,通过逐行读取并将其作为行添加到表模型中,您错误地填充了表。

此外,line.split(": ");考虑到您发布的文本片段中的第一行,返回一个字符串数组[FirstName][danny]。如果您只放置字段数据而不是字段名称,line.split(": ")[1];则可以解决此问题,但是,它不会解决您使用单个数据字段填充行的问题。

考虑创建一个类,也许是联系人,因为我看到您的文本文件上的信息属于联系人信息,读取 txt 文件并创建联系人对象,将它们放入数组中,然后用数据实例化您的表模型。

更好的方法也将导致您编写自己的表模型。

更新:好的,看来我会提出一个解决方法。

假设要加载的 txt 文件都具有相同的格式。

    First Name: dan
    Last Name: rmadakkk
    Phone Number: (348) 794-7329
    Email: leo@live.ca

检查这个:

    public void actionPerformed(ActionEvent arg0) {
    String line;
    JFileChooser fileload = new JFileChooser();
        if (fileload.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) {
            try {
                File file = fileload.getSelectedFile();
                FileInputStream fis = new FileInputStream(file);
                reader = new BufferedReader(new FileReader(file));
                Object[] tableRow = new Object[columnNames.length];
                int column = 0;
                while ((line = reader.readLine()) != null) {
                    tableData[column++] = line.split(": ")[1];
                    if (column > 3) {
                        tableModel.addRow(tableRow);
                        column = 0;
                    }
                }
                reader.close();
             } catch (IOException e10) {
                  JOptionPane.showMessageDialog(null, "Buffered Reader issue.");
             }
        }
    };
于 2013-04-06T23:37:03.630 回答