Загрузка данных


import javax.swing.*;
import java.awt.*;
import java.io.*;

public class ClothesShop extends JFrame {

    public ClothesShop() {

        setTitle("Магазин одежды");
        setSize(700, 500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(null);

        getContentPane().setBackground(new Color(35, 35, 35));

        JLabel title = new JLabel("МАГАЗИН ОДЕЖДЫ");
        title.setBounds(180, 30, 400, 40);
        title.setForeground(Color.WHITE);
        title.setFont(new Font("Arial", Font.BOLD, 30));
        add(title);

        JButton topBtn = createButton("ВЕРХ", 220, 120);
        JButton bottomBtn = createButton("НИЗ", 220, 220);
        JButton hatsBtn = createButton("ГОЛОВНЫЕ УБОРЫ", 220, 320);
        JButton favBtn = createButton("ИЗБРАННОЕ", 220, 410);

        add(topBtn);
        add(bottomBtn);
        add(hatsBtn);
        add(favBtn);

        topBtn.addActionListener(e ->
                new CategoryFrame("Верх", new String[]{
                        "Худи - Теплое и стильное",
                        "Куртка - Осенняя коллекция",
                        "Футболка - Хлопок 100%"
                })
        );

        bottomBtn.addActionListener(e ->
                new CategoryFrame("Низ", new String[]{
                        "Джинсы - Синие классические",
                        "Шорты - Летняя модель",
                        "Спортивные штаны - Удобные"
                })
        );

        hatsBtn.addActionListener(e ->
                new CategoryFrame("Головные уборы", new String[]{
                        "Кепка - Черная",
                        "Шапка - Зимняя",
                        "Панама - Белая"
                })
        );

        favBtn.addActionListener(e -> new FavoritesFrame());

        setVisible(true);
    }

    JButton createButton(String text, int x, int y) {

        JButton btn = new JButton(text);

        btn.setBounds(x, y, 260, 55);
        btn.setBackground(new Color(255, 120, 0));
        btn.setForeground(Color.WHITE);
        btn.setFont(new Font("Arial", Font.BOLD, 18));
        btn.setFocusPainted(false);

        return btn;
    }

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

class CategoryFrame extends JFrame {

    public CategoryFrame(String titleText, String[] items) {

        setTitle(titleText);
        setSize(750, 550);
        setLocationRelativeTo(null);
        setLayout(null);
        getContentPane().setBackground(new Color(245,245,245));

        JLabel title = new JLabel(titleText);
        title.setBounds(300, 20, 300, 40);
        title.setFont(new Font("Arial", Font.BOLD, 28));
        add(title);

        JButton backBtn = new JButton("← Назад");
        backBtn.setBounds(20, 20, 120, 35);
        backBtn.setBackground(new Color(60,60,60));
        backBtn.setForeground(Color.WHITE);
        add(backBtn);

        backBtn.addActionListener(e -> dispose());

        int y = 90;

        for(String item : items) {

            JPanel panel = new JPanel();
            panel.setLayout(null);
            panel.setBounds(80, y, 560, 90);
            panel.setBackground(Color.WHITE);
            panel.setBorder(BorderFactory.createLineBorder(Color.GRAY));

            JLabel label = new JLabel(item);
            label.setBounds(20, 15, 320, 30);
            label.setFont(new Font("Arial", Font.PLAIN, 18));

            JButton favBtn = new JButton("❤ Избранное");
            favBtn.setBounds(360, 25, 160, 35);
            favBtn.setBackground(new Color(255, 80, 80));
            favBtn.setForeground(Color.WHITE);

            favBtn.addActionListener(e -> saveFavorite(item));

            panel.add(label);
            panel.add(favBtn);
            add(panel);

            y += 110;
        }

        setVisible(true);
    }

    private void saveFavorite(String item) {

        try {

            File file = new File("favorites.txt");

            BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
            bw.write(item);
            bw.newLine();
            bw.close();

            JOptionPane.showMessageDialog(
                    this,
                    "Добавлено в избранное:\n" + item
            );

        } catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Ошибка файла");
        }
    }
}

class FavoritesFrame extends JFrame {

    DefaultListModel<String> model = new DefaultListModel<>();
    JList<String> list = new JList<>(model);

    public FavoritesFrame() {

        setTitle("Избранное");
        setSize(500, 400);
        setLocationRelativeTo(null);
        setLayout(null);

        JLabel title = new JLabel("❤ Избранные товары");
        title.setBounds(150, 10, 300, 30);
        add(title);

        JScrollPane scroll = new JScrollPane(list);
        scroll.setBounds(50, 50, 380, 200);
        add(scroll);

        JButton deleteBtn = new JButton("Удалить");
        deleteBtn.setBounds(50, 270, 150, 40);
        add(deleteBtn);

        JButton refreshBtn = new JButton("Обновить");
        refreshBtn.setBounds(250, 270, 150, 40);
        add(refreshBtn);

        loadFavorites();

        deleteBtn.addActionListener(e -> deleteSelected());
        refreshBtn.addActionListener(e -> loadFavorites());

        setVisible(true);
    }

    private void loadFavorites() {

        model.clear();

        try {

            File file = new File("favorites.txt");
            if(!file.exists()) return;

            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            while((line = br.readLine()) != null) {
                model.addElement(line);
            }

            br.close();

        } catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Ошибка загрузки");
        }
    }

    private void deleteSelected() {

        String selected = list.getSelectedValue();

        if(selected == null) return;

        model.removeElement(selected);

        try {

            File file = new File("favorites.txt");
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));

            for(int i = 0; i < model.size(); i++) {
                bw.write(model.get(i));
                bw.newLine();
            }

            bw.close();

        } catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Ошибка удаления");
        }
    }
}