gpt4 book ai didi

java - 从 JTable 写入文本文件,以及从文本文件读取到 JTable

转载 作者:行者123 更新时间:2023-12-02 06:38:54 24 4
gpt4 key购买 nike

我觉得我已经很接近了,但仍然遇到了我不明白的错误。我正在尝试使用保存按钮将数据从 JTable 写入文本文件。我还需要从文件加载回 JTable。任何关于为什么这不能正常工作的建议。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.FileReader;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;


/*PayrollProgram.java
* Created by: Steve Totten
* Created on: 10-13-2013
* This program allows the user to enter the contact's
* name, Email address, age, and phone number. Then the program
* adds the information to a table for easy viewing
* The program has a save button to save to a data file
* it also has a load button that will read from a file to the table
*/

public class ContactInfo {

// Set up the size of the GUI window
private static final int FRAME_WIDTH = 900;
private static final int FRAME_HEIGHT = 400;
static JTable tblContacts;
static int ID = 0;

public static void main(String[] args) {

// Set up the user interface
final JFrame frame = new JFrame();
final JPanel buttonPanel = new JPanel();
frame.add(buttonPanel);
// I need this to be able to put the buttons where I want
buttonPanel.setLayout(null);

// Set up Add button and its location
final JButton buttonAdd = new JButton(" Add ");
buttonAdd.setBounds(50, 325, 100, 20);
buttonPanel.add(buttonAdd);


// Set up Exit button and its location
final JButton buttonExit = new JButton("Exit");
buttonExit.setBounds(200, 325, 100, 20);
buttonPanel.add(buttonExit);

// Method for exit button
buttonExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {

System.exit(0);
}
});

// Set up Save button and its location
final JButton buttonSave = new JButton("Save");
buttonSave.setBounds(350, 325, 100, 20);
buttonPanel.add(buttonSave);

// Set up Save button method
buttonSave.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{

BufferedWriter bfw = new BufferedWriter(new FileWriter("C:\\Users\\Steve\\Workspace\\ContactInfo\\ContactInfo.txt"));

for (int i = 0 ; i < tblContacts.getRowCount(); i++)
{

for(int j = 0 ; j < tblContacts.getColumnCount();j++)
{
bfw.newLine();
bfw.write((String)(tblContacts.getValueAt(i,j)));
bfw.write("\t");;
}
}
bfw.close();
}catch(Exception ex) {

ex.printStackTrace();
}
}
});
// Set up Load button and its location
final JButton buttonLoad = new JButton("Load");
buttonLoad.setBounds(500, 325, 100, 20);
buttonPanel.add(buttonLoad);

// Method for load button
buttonLoad.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String line;
BufferedReader reader;
try{
reader = new BufferedReader(new FileReader("C:\\Users\\Steve\\Workspace\\ContactInfo\\ContactInfo.txt"));
while((line = reader.readLine()) != null)
{
tblContacts.add(null, line.split(", "));
}
reader.close();
}
catch(Exception ex){

ex.printStackTrace();

}

}
});
// Set up Labels for name, hours, and pay rate
final JLabel lblFirst = new JLabel("Enter First Name: ");
lblFirst.setBounds(20, 5, 150, 100);
buttonPanel.add(lblFirst);

final JLabel lblLast = new JLabel("Enter Last Name: ");
lblLast.setBounds(20, 60, 150, 100);
buttonPanel.add(lblLast);

final JLabel lblAddress = new JLabel("Enter their Age: ");
lblAddress.setBounds(20, 115, 150, 100);
buttonPanel.add(lblAddress);

final JLabel lblAge = new JLabel("Enter Email Address:");
lblAge.setBounds(20, 170, 150, 100);
buttonPanel.add(lblAge);

final JLabel lblPhone = new JLabel("Enter phone number:");
lblPhone.setBounds(20, 225, 150, 100);
buttonPanel.add(lblPhone);


// Set up textboxes for all expected inputs
final JTextField txtFirst = new JTextField();
txtFirst.setBounds(180, 40, 100, 25);
buttonPanel.add(txtFirst);

final JTextField txtLast = new JTextField();
txtLast.setBounds(180, 95, 100, 25);
buttonPanel.add(txtLast);

final JTextField txtAge = new JTextField();
txtAge.setBounds(180, 150, 100, 25);
buttonPanel.add(txtAge);

final JTextField txtPhone = new JTextField();
txtPhone.setBounds(180, 260, 100, 25);
buttonPanel.add(txtPhone);

final JTextField txtEmail = new JTextField();
txtEmail.setBounds(180, 210, 100, 25);
buttonPanel.add(txtEmail);

// Set up of columns in the table
String[] columns = { "ID", "Last Name", "First Name", "Age", "Email Address",
"Phone Number" };
// Set up of the table with the appropriate column headers
final DefaultTableModel model = new DefaultTableModel(null, columns);
final JTable tblContacts = new JTable();
tblContacts.setModel(model);
JScrollPane scrollPane = new JScrollPane(tblContacts);
scrollPane.setBounds(300, 20, 550, 300);
buttonPanel.add(scrollPane);


// Save button methods, including validation checking
buttonAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (txtFirst.getText().length() == 0) {
JOptionPane.showMessageDialog(null, "Error: no first name");
return;
}

if (txtLast.getText().length() == 0) {
JOptionPane.showMessageDialog(null, "Error: no last name");
return;
}

int age = 0;
try {
age = Integer.parseInt(txtAge.getText());
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Error: invalid age value");
return;
}

if (age < 0 || age > 120) {
JOptionPane.showMessageDialog(null,
"Error: invalid age range (0 - 120 allowed)");
return;
}

if (txtPhone.getText().length()==0){
JOptionPane.showMessageDialog(null, "Error: no phone number ");
return;
}


// Add an ID number to each entry and add the entry to the table
ID++;
model.addRow(new Object[] { String.valueOf(ID),
txtLast.getText(), txtFirst.getText(),
txtAge.getText(), txtEmail.getText(), txtPhone.getText() });


// Once entry is added to the table, the text fields are cleared for the next entry
txtLast.setText("");
txtFirst.setText("");
txtAge.setText("");
txtPhone.setText("");
txtEmail.setText("");



}
});
/*
* This sets the size of the window along with the title and it sets up
* the exit on close X button to close the window when the X is clicked.
*/

frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setTitle("Contact Information");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

}

最佳答案

调查结果和建议:

  • 当您尝试使用 JTable 时,会遇到 NullPointException(NPE)。
  • 这是因为您正在隐藏类字段 tblContacts。这意味着您在类中声明此字段,然后重新声明并在主方法中初始化它。那么,当您重新声明该变量时,它是一个新的且不同的变量,因此您将类字段保留为空。
  • 解决方案是不要在其他地方重新声明变量。
  • 此外,希望此代码只是演示代码,而不是您的真实程序。在您的真实程序中,您不会在静态主方法(或除非常简短的主方法之外的任何静态方法)中包含任何此类代码,并且大多数字段将是非静态实例字段。<
<小时/>

阴影示例:

public class Foo {
private int bar; // class field

public Foo() {
int bar = 3; // I've re-declared bar here and so the class field is still unassigned.
}
}

纠正它:

public class Foo {
private int bar; // class field

public Foo() {
bar = 3; // bar not re-declared
}
}

看出区别了吗?

关于java - 从 JTable 写入文本文件,以及从文本文件读取到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19347649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com