You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing笔记项目更新笔记重复创建问题求助

问题:Java Swing笔记应用更新笔记时重复创建条目且未覆盖原笔记

我正在为学校项目开发一个Java Swing笔记应用GUI,尝试更新现有笔记时,未覆盖原笔记反而创建了新条目,旧笔记仍保留在菜单中,同时希望避免出现重复笔记标题。我修改了save方法但问题仍未解决。

完整代码

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class NotizbuchGUI extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JTextArea textArea;
    private JTextField titleField;
    private JList<Notiz> noteList;
    private Notizbuch notizbuch;

    public NotizbuchGUI() {
        super("笔记本");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 400);

        // 创建GUI组件
        JPanel panel = new JPanel(new BorderLayout());
        textArea = new JTextArea();
        titleField = new JTextField();
        noteList = new JList<>();
        JScrollPane scrollPane = new JScrollPane(noteList);
        JButton newButton = new JButton("新建笔记");
        JButton saveButton = new JButton("保存");
        JButton deleteButton = new JButton("删除");

        // 将GUI组件添加到面板
        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.add(new JLabel("标题:"), BorderLayout.WEST);
        topPanel.add(titleField, BorderLayout.CENTER);
        topPanel.add(newButton, BorderLayout.EAST);
        panel.add(topPanel, BorderLayout.NORTH);
        panel.add(textArea, BorderLayout.CENTER);
        JPanel buttonPanel = new JPanel(new FlowLayout());
        buttonPanel.add(saveButton);
        buttonPanel.add(deleteButton);
        panel.add(buttonPanel, BorderLayout.SOUTH);
        panel.add(scrollPane, BorderLayout.WEST);
        add(panel);

        // 创建笔记本实例
        notizbuch = new Notizbuch();

        // 填充笔记列表
        updateNoteList();

        // 添加监听器
        noteList.addListSelectionListener(e -> {
            if (!e.getValueIsAdjusting()) {
                Notiz selectedNote = noteList.getSelectedValue();
                if (selectedNote != null) {
                    titleField.setText(selectedNote.getTitel());
                    textArea.setText(selectedNote.getText());
                }
            }
        });
        newButton.addActionListener(e -> {
            titleField.setText("");
            textArea.setText("");
        });
        saveButton.addActionListener(e -> {
            String titel = titleField.getText();
            String text = textArea.getText();
            if (!titel.isEmpty() && !text.isEmpty()) {
                Notiz notiz = new Notiz(titel, text);
                notizbuch.addNotiz(notiz);
                updateNoteList();
                saveNotiz(notiz);
            }
        });
        deleteButton.addActionListener(e -> {
            Notiz selectedNote = noteList.getSelectedValue();
            if (selectedNote != null) {
                notizbuch.removeNotiz(selectedNote);
                updateNoteList();
                deleteNotiz(selectedNote);
                titleField.setText("");
                textArea.setText("");
            }
        });

        setVisible(true);
    }

    private void updateNoteList() {
        DefaultListModel<Notiz> model = new DefaultListModel<>();
        for (Notiz notiz : notizbuch.getNotizen()) {
            model.addElement(notiz);
        }
        noteList.setModel(model);
    }

    private void saveNotiz(Notiz notiz) {
        try {
            String filename = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".txt";
            File file = new File(filename);
            if (!file.exists()) {
                file.createNewFile();
            }
            BufferedReader reader = new BufferedReader(new FileReader(file));
            ArrayList<String> lines = new ArrayList<String>();
            String line;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
            reader.close();
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
            boolean notizFound = false;
            for (int i = 0; i < lines.size(); i += 2) {
                String titel = lines.get(i);
                String text = lines.get(i + 1);
                if (titel.equals(notiz.getTitel())) {
                    writer.write(notiz.getTitel() + "\n");
                    writer.write(notiz.getText() + "\n");
                    notizFound = true;
                } else {
                    writer.write(titel + "\n");
                    writer.write(text + "\n");
                }
            }
            if (!notizFound) {
                writer.write(notiz.getTitel() + "\n");
                writer.write(notiz.getText() + "\n");
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void deleteNotiz(Notiz notiz) {
        String filename = new SimpleDateFormat("yyyy-MM-dd").format(notiz.getDatum()) + ".txt";
        File file = new File(filename);
        if (file.exists()) {
            file.delete();
        }
    }

    public static void main(String[] args) {
        new NotizbuchGUI();
    }
}

修改后的save方法

private void saveNotiz(Notiz notiz) {
    try {
        String filename = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".txt";
        File file = new File(filename);
        if (!file.exists()) {
            file.createNewFile();
        }
        BufferedReader reader = new BufferedReader(new FileReader(file));
        List<String> lines = new ArrayList<String>();
        String line;
        while ((line = reader.readLine()) != null) {
            lines.add(line);
        }
        reader.close();
        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        boolean notizFound = false;
        for (int i = 0; i < lines.size(); i += 2) {
            String titel = lines.get(i);
            String text = lines.get(i + 1);
            if (titel.equals(notiz.getTitel())) {
                writer.write(notiz.getTitel() + "\n");
                writer.write(notiz.getText() + "\n");
                notizFound = true;
            } else {
                writer.write(titel + "\n");
                writer.write(text + "\n");
            }
        }
        if (!notizFound) {
            writer.write(notiz.getTitel() + "\n");
            writer.write(notiz.getText() + "\n");
        }
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

GUI界面说明

界面布局:左侧为笔记列表区域,顶部包含标题输入框、“新建笔记”按钮,中间是笔记内容编辑文本域,底部设有“保存”和“删除”按钮。


内容的提问来源于stack exchange,提问作者Jack Tucker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:42:45