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


import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;

public class Main {

    public static void main(String[] args) {

        JFrame window = new JFrame("Dota 2 Stats");

        window.setSize(1000, 600);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocationRelativeTo(null);

        // Главная панель
        JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
        mainPanel.setBorder(
                BorderFactory.createEmptyBorder(15, 15, 15, 15)
        );

        // =========================
        // ЗАГОЛОВОК
        // =========================

        JLabel title = new JLabel(
                "Dota 2 Stats",
                SwingConstants.CENTER
        );

        title.setFont(
                new Font("Arial", Font.BOLD, 30)
        );

        JLabel subtitle = new JLabel(
                "Статистика игроков текущего матча",
                SwingConstants.CENTER
        );

        subtitle.setFont(
                new Font("Arial", Font.PLAIN, 16)
        );

        JPanel header = new JPanel(
                new GridLayout(2, 1)
        );

        header.add(title);
        header.add(subtitle);

        // =========================
        // ТАБЛИЦА
        // =========================

        String[] columns = {
                "Игрок",
                "Герой",
                "Ранг",
                "Winrate",
                "Матчи",
                "KDA",
                "Dotabuff"
        };

        Object[][] players = {

                {
                        "Player 1",
                        "Invoker",
                        "Immortal",
                        "58%",
                        "1240",
                        "3.2",
                        "Открыть"
                },

                {
                        "Player 2",
                        "Pudge",
                        "Divine",
                        "54%",
                        "980",
                        "2.8",
                        "Открыть"
                },

                {
                        "Player 3",
                        "Juggernaut",
                        "Ancient",
                        "51%",
                        "1540",
                        "2.5",
                        "Открыть"
                },

                {
                        "Player 4",
                        "Axe",
                        "Legend",
                        "49%",
                        "870",
                        "2.1",
                        "Открыть"
                },

                {
                        "Player 5",
                        "Lion",
                        "Legend",
                        "52%",
                        "1100",
                        "2.7",
                        "Открыть"
                }
        };

        DefaultTableModel model =
                new DefaultTableModel(players, columns) {

                    @Override
                    public boolean isCellEditable(
                            int row,
                            int column
                    ) {
                        return false;
                    }
                };

        JTable table = new JTable(model);

        table.setRowHeight(40);

        table.setFont(
                new Font("Arial", Font.PLAIN, 14)
        );

        table.getTableHeader().setFont(
                new Font("Arial", Font.BOLD, 14)
        );

        table.setSelectionMode(
                ListSelectionModel.SINGLE_SELECTION
        );

        JScrollPane scrollPane =
                new JScrollPane(table);

        // =========================
        // НИЖНЯЯ ПАНЕЛЬ
        // =========================

        JPanel bottomPanel =
                new JPanel(new BorderLayout());

        JLabel status =
                new JLabel("  Статус: готово");

        status.setFont(
                new Font("Arial", Font.PLAIN, 14)
        );

        JButton updateButton =
                new JButton("Обновить статистику");

        updateButton.addActionListener(e -> {

            status.setText(
                    "  Статус: получение данных..."
            );

            Timer timer = new Timer(
                    1500,
                    event -> status.setText(
                            "  Статус: данные обновлены"
                    )
            );

            timer.setRepeats(false);
            timer.start();
        });

        bottomPanel.add(
                status,
                BorderLayout.WEST
        );

        bottomPanel.add(
                updateButton,
                BorderLayout.EAST
        );

        // =========================
        // СОБИРАЕМ ОКНО
        // =========================

        mainPanel.add(
                header,
                BorderLayout.NORTH
        );

        mainPanel.add(
                scrollPane,
                BorderLayout.CENTER
        );

        mainPanel.add(
                bottomPanel,
                BorderLayout.SOUTH
        );

        window.setContentPane(mainPanel);

        window.setVisible(true);
    }
}