Загрузка данных
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
public class Main {
// Цвета интерфейса
static final Color BLACK = new Color(5, 5, 8);
static final Color DARK = new Color(10, 10, 15);
static final Color PANEL = new Color(14, 14, 20);
static final Color BORDER = new Color(35, 40, 50);
static final Color WHITE = new Color(245, 245, 250);
static final Color GRAY = new Color(150, 155, 165);
static final Color BLUE = new Color(70, 150, 255);
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Dota 2 Stats");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1400, 850);
frame.setLocationRelativeTo(null);
frame.getContentPane().setBackground(BLACK);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout(0, 15));
mainPanel.setBackground(BLACK);
mainPanel.setBorder(BorderFactory.createEmptyBorder(25, 30, 25, 30));
// =========================
// ЗАГОЛОВОК
// =========================
JLabel title = new JLabel("DOTA 2 STATS");
title.setForeground(WHITE);
title.setFont(new Font("Segoe UI", Font.BOLD, 32));
JPanel titlePanel = new JPanel(new BorderLayout());
titlePanel.setBackground(BLACK);
titlePanel.add(title, BorderLayout.WEST);
mainPanel.add(titlePanel, BorderLayout.NORTH);
// =========================
// ЦЕНТР
// =========================
JPanel teamsPanel = new JPanel();
teamsPanel.setLayout(new BoxLayout(teamsPanel, BoxLayout.Y_AXIS));
teamsPanel.setBackground(BLACK);
teamsPanel.add(createTeamPanel(
"THE RADIANT",
new String[]{
"Player One",
"Player Two",
"Player Three",
"Player Four",
"Player Five"
},
new String[]{
"Immortal",
"Divine V",
"Ancient III",
"Legend II",
"Ancient V"
},
new String[]{
"W W L W W W L W",
"W L W W L W W L",
"L W W W L W L W",
"W W L W W L W W",
"W L W L W W W L"
},
new String[]{"52%", "61%", "48%", "55%", "59%"}
));
teamsPanel.add(Box.createVerticalStrut(15));
teamsPanel.add(createTeamPanel(
"THE DIRE",
new String[]{
"Player Six",
"Player Seven",
"Player Eight",
"Player Nine",
"Player Ten"
},
new String[]{
"Divine II",
"Legend I",
"Immortal",
"Legend III",
"Ancient IV"
},
new String[]{
"W L W W L W W L",
"W W L W W L W W",
"L W W L W W L W",
"W L W W W L W L",
"W L W W L W L W"
},
new String[]{"50%", "51%", "60%", "51%", "48%"}
));
JScrollPane scrollPane = new JScrollPane(teamsPanel);
scrollPane.setBorder(BorderFactory.createEmptyBorder());
scrollPane.setBackground(BLACK);
scrollPane.getViewport().setBackground(BLACK);
mainPanel.add(scrollPane, BorderLayout.CENTER);
frame.setContentPane(mainPanel);
frame.setVisible(true);
});
}
// =========================================================
// СОЗДАНИЕ КОМАНДЫ
// =========================================================
static JPanel createTeamPanel(
String teamName,
String[] players,
String[] ranks,
String[] recentMatches,
String[] winrates
) {
JPanel panel = new JPanel(new BorderLayout());
panel.setBackground(PANEL);
panel.setBorder(BorderFactory.createLineBorder(BORDER, 1));
panel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 360));
// Название команды
JLabel teamLabel = new JLabel(" " + teamName);
teamLabel.setForeground(WHITE);
teamLabel.setFont(new Font("Segoe UI", Font.BOLD, 20));
teamLabel.setBorder(
BorderFactory.createEmptyBorder(12, 5, 12, 5)
);
panel.add(teamLabel, BorderLayout.NORTH);
// Таблица
String[] columns = {
"#",
"ИГРОК",
"РАНГ",
"ПОСЛЕДНИЕ МАТЧИ",
"МАТЧЕЙ",
"WINRATE"
};
Object[][] data = new Object[5][6];
for (int i = 0; i < 5; i++) {
data[i][0] = i + 1;
data[i][1] = players[i];
data[i][2] = ranks[i];
data[i][3] = recentMatches[i];
data[i][4] = 100 + i * 147;
data[i][5] = winrates[i];
}
DefaultTableModel model = new DefaultTableModel(data, columns) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
JTable table = new JTable(model);
table.setBackground(PANEL);
table.setForeground(WHITE);
table.setFont(new Font("Segoe UI", Font.PLAIN, 15));
table.setRowHeight(52);
table.setGridColor(BORDER);
table.setShowVerticalLines(true);
table.setShowHorizontalLines(true);
table.setSelectionBackground(new Color(25, 35, 50));
table.setSelectionForeground(WHITE);
// Заголовок таблицы
table.getTableHeader().setBackground(DARK);
table.getTableHeader().setForeground(GRAY);
table.getTableHeader().setFont(
new Font("Segoe UI", Font.BOLD, 13)
);
table.getTableHeader().setPreferredSize(
new Dimension(0, 40)
);
// Выравнивание
DefaultTableCellRenderer centerRenderer =
new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(
SwingConstants.CENTER
);
centerRenderer.setForeground(WHITE);
centerRenderer.setBackground(PANEL);
for (int i = 0; i < table.getColumnCount(); i++) {
table.getColumnModel()
.getColumn(i)
.setCellRenderer(centerRenderer);
}
// Игроки — слева
DefaultTableCellRenderer leftRenderer =
new DefaultTableCellRenderer();
leftRenderer.setHorizontalAlignment(
SwingConstants.LEFT
);
leftRenderer.setForeground(WHITE);
leftRenderer.setBackground(PANEL);
table.getColumnModel()
.getColumn(1)
.setCellRenderer(leftRenderer);
// Ширина колонок
table.getColumnModel().getColumn(0).setPreferredWidth(45);
table.getColumnModel().getColumn(1).setPreferredWidth(220);
table.getColumnModel().getColumn(2).setPreferredWidth(150);
table.getColumnModel().getColumn(3).setPreferredWidth(330);
table.getColumnModel().getColumn(4).setPreferredWidth(100);
table.getColumnModel().getColumn(5).setPreferredWidth(110);
panel.add(table, BorderLayout.CENTER);
return panel;
}
}