- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在创建一个程序来充当日记,日记对象应该创建一个 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 Pattern至 separate 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/
我向我的记录器添加了两个具有不同格式化程序的处理程序。第一个需要继承 logging.Formatter 来进行自定义格式化。默认格式化程序将满足第二个处理程序的需要。 假设第一个格式化程序只是从消息
我尝试运行一个简单的 .feature 文件以生成 Step 文件所需的代码,但返回以下异常: 下面是pom文件: org.seleniumhq.selenium
userA 在法国,他们将某样东西的价格定为 10 欧元,我获取他们的货币信息,并使用 Locale.current.identifier 将其本地区域的副本记录到数据库,这给出了我 € 并将其保存到
我已经在 android 项目上集成了 checkstyle。但是我收到以下错误: > Unable to create listeners: formatters {[com.puppycrawl.
这个解决方案对我不起作用: Running a spec in RubyMine results in "cannot load such file -- teamcity/spec/runner/f
我正在尝试在 Eclipse 中设置我的第一个 Cucumber。我按照教程视频建议的方式在 Features 文件夹中设置了一个基本功能文件,但尝试作为 cucumber 功能执行时,我得到以下信息
操作系统:Arch Linux,Rails 版本:4,RubyMine:6.3 当我从 Tools - Run Rake Task - spec 运行规范时,我总是会收到此错误: /home/chyl
我正在尝试使用 formattable Awesome 包并获得一个表格,其中包含在多列上缩放的百分比和颜色。 这里是代码 set.seed(123) df % mutate_if(is.nume
我试图将字符串定位在一行上的某个起始位置,无论前一个文本在哪里结束。例如: Mandatory arguments to long options are mandatory for short op
因此,我将以下代码写入文件: Formatter output = ....... // Creating the formatter works, writes to appropriate fil
我知道有很多 HTML 格式化程序。我已经尝试了很多,但没有一个符合我的要求。请建议您是否遇到了可以: 1) 转换 BBCC 进入 BB
在本文中,我们将介绍 Java Formatter.format 方法。 java.util.Formatter 类用作 printf 样式格式字符串的解释器。 Formatter 可以执行布局对齐、
我有一个简单的验证器,可以根据正则表达式检查输入: .directive('test', function () { return { restrict: 'A', require:
假设您有一些表格数据,其中数据长度可能会有所不同,Formatter 类是否有自动调整填充的规定? 所以不是这个(注意 A 列): columnA columnB 1
我有一个这样注释的模型: [DataMember(EmitDefaultValue = false)] [JsonProperty("extension_{0}_name")] public stri
示例数据(修改自 formattable github 文档): df <- data.frame( id = 1:10, name = c("Bob", "Ashley", "James",
我编写了下面的代码,它创建了一个文件并完美地写入它,但我想在输出中查看文件的内容,但我只收到此消息:“java.io.BufferedWriter@140e19d”。我不明白!谁能向我解释一下为什么我
我有兴趣使用 formattable R 包中的工具,但我只想在表格中显示有更改的地方。也就是说,我想要通过 collapse_rows() 函数在 kableExtra 包中提供分层行标签。 例如,
我已经开始使用 Intellij (之前使用过 Eclipse),但我似乎无法模仿 Eclipse 格式 Eclipse Code Formatter 插件完成了大部分工作,但仍然存在一些差异。 例如
我是编码新手,有一个问题如何修复此代码以实际使用用户输入作为创建的文件的新名称。如您所见,我希望在格式化程序中使用字符串“文件名”(例如,输入是“Example.txt”,这应该在格式化程序的构造函数
我是一名优秀的程序员,十分优秀!