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
相关产品推荐
相关产品推荐

