gpt4 book ai didi

java - 使用 ActionListener 使用 Formatter 写入文件(JAVA)时出错

转载 作者:行者123 更新时间:2023-12-01 10:09:12 24 4
gpt4 key购买 nike

所以我正在创建一个程序来充当日记,日记对象应该创建一个 CreateFile将创建一个文件的对象,将 JTextArea 中的文本写入其中条目,然后关闭文件。(本质上是保存文件)。每当用户按下保存按钮时,它就应该执行此操作。

现在所发生的一切都是创建一个空白文件。除了写入文件之外,一切都正常。请帮助识别并纠正写入我的文件时的错误,下面是我的代码。

这是期刊类

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Formatter;

import javax.swing.*;
public class Journal extends JFrame{
private JTextField date;
public JTextArea entry;
private JButton button;
public static String day, month, year;
private Formatter formatter;
public Journal(String month, String day, String year){
this.day=day;
this.month=month;
this.year=year;
//Use parameter so display a date
String theDate = month + "/ "+day+"/ "+year;
Font theFont = new Font("Serif",Font.BOLD,20);
setLayout(new BorderLayout());
date = new JTextField(theDate+ " "+"Journal Entry");
date.setFont(theFont);
date.setSize(new Dimension(500,50));
date.setEditable(false);
//Create a save Button
button = new JButton("Save Entry");

add(button,BorderLayout.WEST);
//Create a place to write the journal entry
entry = new JTextArea("Enter your entry here");
entry.setLineWrap(true);
Font JTFFont = new Font("Serif",Font.PLAIN,14);
entry.setFont(JTFFont);
Handlerclass handler = new Handlerclass();
button.addActionListener(handler);
add(date,BorderLayout.NORTH);
add(entry,BorderLayout.CENTER);
}
private class Handlerclass implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {

try {

CreateFile cf = new CreateFile(month,day,year);
cf.openFile();
cf.addRecords();
cf.closeFile();



}
catch(Exception error){
System.out.println("You have an error");
}
}

}
public void closeFile(){
formatter.close();
}
}

这是 CreateFile 类

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.lang.*;
import java.util.*;
public class CreateFile extends Journal{

public CreateFile(String month, String day, String year) {
super(month, day, year);
// TODO Auto-generated constructor stub
}

private Formatter x;

public void openFile(){
try{
String date = String.format("%s_%s_%s.txt", this.month, this.day, this.year);
x = new Formatter(date);
}
catch(Exception e)
{

System.out.println("you have an error");
}
}
public void closeFile(){
x.close();
}
public void addRecords(){

entry.addKeyListener(
new KeyListener(){

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
x.format(entry.getText());
}

@Override
public void keyPressed(KeyEvent e) {}

@Override
public void keyReleased(KeyEvent e) {}
}
);

}
}

这是主类

import java.awt.Color;

import javax.swing.*;

public class MainClass {
public static void main(String args[]){
//Create new Journal Entry
Journal j = new Journal("3","27","2016");
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setVisible(true);
j.setSize(500, 500);
j.setResizable(false);
j.getContentPane().setBackground(Color.WHITE);
}
}

最佳答案

实现中的主要问题是方法 CreateFile::addRecords 不会写入文件。仅注册了一个KeyListener。之后Formatter立即关闭。现在尝试在每次按键时写入文件,但这是不可能的,因为 Formatter 已关闭。

其他建议:最好在捕获异常时打印 Stacktrace (err.printStackTrace)。这样您就能够找出问题所在以及问题所在。

下一点(CreateFile 扩展 Journal):有时最好使用 Strategy Patternseparate concerns并避免子类。

这是一个解决您的问题并尊重其他要点的实现:

import java.awt.*;
import java.io.FileNotFoundException;
import javax.swing.*;
public class Journal extends JFrame{
public Journal(String month, String day, String year){
String theDate = month + "/ "+day+"/ "+year;
Font theFont = new Font("Serif",Font.BOLD,20);
setLayout(new BorderLayout());
JTextField dateField = new JTextField(theDate+ " "+"Journal Entry");
dateField.setFont(theFont);
dateField.setSize(new Dimension(500,50));
dateField.setEditable(false);
JButton button = new JButton("Save Entry");
JTextArea entry = new JTextArea("Enter your entry here");
entry.setLineWrap(true);
Font JTFFont = new Font("Serif",Font.PLAIN,14);
entry.setFont(JTFFont);
String date = String.format("%s_%s_%s.txt", month, day, year);
try {
button.addActionListener(new SaveHandler(date, entry));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
add(button,BorderLayout.WEST);
add(dateField,BorderLayout.NORTH);
add(entry,BorderLayout.CENTER);
}
}

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.util.Formatter;

class SaveHandler implements ActionListener {

private String date;
private JTextArea entry;
public SaveHandler(String date, JTextArea entry) throws FileNotFoundException {
this.date = date;
this.entry = entry;
}

@Override
public void actionPerformed(ActionEvent e) {
try {
new Formatter(date).format(entry.getText()).close();
} catch (FileNotFoundException err) {
err.printStackTrace();
}
}
}

关于java - 使用 ActionListener 使用 Formatter 写入文件(JAVA)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253065/

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