这是我的文本文件的样子:将其复制到记事本中并在SSCCE中打开
First Name: dan Last Name: rmadakkk Phone Number: (348) 794-7329 Email: 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);
}
}
答案 0 :(得分:1)
在您的片段判断时,txt文件在一行中包含表格中每列的值,因此,通过逐行读取并将其作为行添加到表格模型中,您错误地填充了表格。
此外,line.split(": ");
会返回一个字符串数组,并考虑到您发布的文本代码段中的第一行[FirstName][danny]
。如果您只是放置字段数据而不是字段名称,line.split(": ")[1];
会解决这个问题,但是,它不会解决您使用单个数据字段填充行的问题。
考虑创建一个Class,也许是Contact,因为我看到你的文本文件中的信息属于contacts info,读取txt文件并创建Contact对象,将它们放在一个数组中,然后用数据实例化你的表模型。
在编写自己的表格模型时,也会遇到更好的方法。
更新: 好的,似乎我会提出一个解决方法。
确定要加载的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.");
}
}
};