本文目录导读:

我将为您提供一个完整的Java文章管理系统的案例,包含前后端代码。
这是一个简单的文章管理系统,支持文章的增删改查、分类管理、搜索等功能。
后端代码
实体类 Article.java
package com.example.article.entity;
import java.time.LocalDateTime;
public class Article {
private Long id;
private String title;
private String author;
private String category;
private String content;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private int viewCount;
public Article() {}
public Article(Long id, String title, String author, String category,
String content, LocalDateTime createTime, LocalDateTime updateTime) {
this.id = id;
this.title = title;
this.author = author;
this.category = category;
this.content = content;
this.createTime = createTime;
this.updateTime = updateTime;
this.viewCount = 0;
}
// Getter和Setter方法
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
public String getCategory() { return category; }
public void setCategory(String category) { this.category = category; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
public LocalDateTime getUpdateTime() { return updateTime; }
public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
public int getViewCount() { return viewCount; }
public void setViewCount(int viewCount) { this.viewCount = viewCount; }
@Override
public String toString() {
return "Article{" +
"id=" + id +
", title='" + title + '\'' +
", author='" + author + '\'' +
", category='" + category + '\'' +
", createTime=" + createTime +
", viewCount=" + viewCount +
'}';
}
}
数据库工具类 DBUtil.java
package com.example.article.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/article_db?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "123456";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void close(AutoCloseable... resources) {
for (AutoCloseable resource : resources) {
if (resource != null) {
try {
resource.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
数据访问对象 ArticleDAO.java
package com.example.article.dao;
import com.example.article.entity.Article;
import com.example.article.util.DBUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ArticleDAO {
// 添加文章
public boolean addArticle(Article article) {
String sql = "INSERT INTO articles (title, author, category, content, create_time, update_time) VALUES (?, ?, ?, ?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, article.getTitle());
ps.setString(2, article.getAuthor());
ps.setString(3, article.getCategory());
ps.setString(4, article.getContent());
ps.setTimestamp(5, Timestamp.valueOf(article.getCreateTime()));
ps.setTimestamp(6, Timestamp.valueOf(article.getUpdateTime()));
return ps.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 删除文章
public boolean deleteArticle(Long id) {
String sql = "DELETE FROM articles WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setLong(1, id);
return ps.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 更新文章
public boolean updateArticle(Article article) {
String sql = "UPDATE articles SET title = ?, author = ?, category = ?, content = ?, update_time = ? WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, article.getTitle());
ps.setString(2, article.getAuthor());
ps.setString(3, article.getCategory());
ps.setString(4, article.getContent());
ps.setTimestamp(5, Timestamp.valueOf(article.getUpdateTime()));
ps.setLong(6, article.getId());
return ps.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 根据ID查找文章
public Article getArticleById(Long id) {
String sql = "SELECT * FROM articles WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setLong(1, id);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
return mapRowToArticle(rs);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// 获取所有文章
public List<Article> getAllArticles() {
List<Article> articles = new ArrayList<>();
String sql = "SELECT * FROM articles ORDER BY create_time DESC";
try (Connection conn = DBUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
articles.add(mapRowToArticle(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return articles;
}
// 搜索文章
public List<Article> searchArticles(String keyword) {
List<Article> articles = new ArrayList<>();
String sql = "SELECT * FROM articles WHERE title LIKE ? OR author LIKE ? OR category LIKE ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
String searchPattern = "%" + keyword + "%";
ps.setString(1, searchPattern);
ps.setString(2, searchPattern);
ps.setString(3, searchPattern);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
articles.add(mapRowToArticle(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return articles;
}
// 增加浏览量
public void incrementViewCount(Long id) {
String sql = "UPDATE articles SET view_count = view_count + 1 WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setLong(1, id);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// ResultSet映射到Article对象
private Article mapRowToArticle(ResultSet rs) throws SQLException {
Article article = new Article();
article.setId(rs.getLong("id"));
article.setTitle(rs.getString("title"));
article.setAuthor(rs.getString("author"));
article.setCategory(rs.getString("category"));
article.setContent(rs.getString("content"));
article.setCreateTime(rs.getTimestamp("create_time").toLocalDateTime());
article.setUpdateTime(rs.getTimestamp("update_time").toLocalDateTime());
article.setViewCount(rs.getInt("view_count"));
return article;
}
}
服务层 ArticleService.java
package com.example.article.service;
import com.example.article.dao.ArticleDAO;
import com.example.article.entity.Article;
import java.time.LocalDateTime;
import java.util.List;
public class ArticleService {
private ArticleDAO articleDAO = new ArticleDAO();
// 创建文章
public boolean createArticle(String title, String author, String category, String content) {
if (title == null || title.trim().isEmpty()) {
return false;
}
Article article = new Article();
article.setTitle(title.trim());
article.setAuthor(author);
article.setCategory(category);
article.setContent(content);
article.setCreateTime(LocalDateTime.now());
article.setUpdateTime(LocalDateTime.now());
return articleDAO.addArticle(article);
}
// 更新文章
public boolean updateArticle(Long id, String title, String author, String category, String content) {
Article article = articleDAO.getArticleById(id);
if (article == null) {
return false;
}
article.setTitle(title);
article.setAuthor(author);
article.setCategory(category);
article.setContent(content);
article.setUpdateTime(LocalDateTime.now());
return articleDAO.updateArticle(article);
}
// 删除文章
public boolean deleteArticle(Long id) {
return articleDAO.deleteArticle(id);
}
// 获取文章
public Article getArticle(Long id) {
articleDAO.incrementViewCount(id);
return articleDAO.getArticleById(id);
}
// 获取所有文章
public List<Article> getAllArticles() {
return articleDAO.getAllArticles();
}
// 搜索文章
public List<Article> searchArticles(String keyword) {
return articleDAO.searchArticles(keyword);
}
// 获取热门文章(按浏览量排序)
public List<Article> getHotArticles(int limit) {
List<Article> allArticles = articleDAO.getAllArticles();
allArticles.sort((a1, a2) -> a2.getViewCount() - a1.getViewCount());
return allArticles.stream().limit(limit).toList();
}
}
前端代码(Java Swing GUI)
ArticleApp.java
package com.example.article.gui;
import com.example.article.entity.Article;
import com.example.article.service.ArticleService;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.List;
public class ArticleApp extends JFrame {
private ArticleService articleService = new ArticleService();
private JTable articleTable;
private DefaultTableModel tableModel;
private JTextField searchField;
private JTextArea contentArea;
public ArticleApp() {
initUI();
loadArticles();
}
private void initUI() {
setTitle("文章管理系统");
setSize(900, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// 顶部工具栏
JPanel toolbarPanel = new JPanel(new BorderLayout());
// 搜索面板
JPanel searchPanel = new JPanel();
searchPanel.add(new JLabel("搜索: "));
searchField = new JTextField(20);
searchPanel.add(searchField);
JButton searchButton = new JButton("搜索");
searchPanel.add(searchButton);
JButton showAllButton = new JButton("显示全部");
searchPanel.add(showAllButton);
toolbarPanel.add(searchPanel, BorderLayout.WEST);
// 操作按钮面板
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("添加文章");
JButton editButton = new JButton("编辑文章");
JButton deleteButton = new JButton("删除文章");
JButton viewButton = new JButton("查看文章");
JButton refreshButton = new JButton("刷新");
buttonPanel.add(addButton);
buttonPanel.add(editButton);
buttonPanel.add(deleteButton);
buttonPanel.add(viewButton);
buttonPanel.add(refreshButton);
toolbarPanel.add(buttonPanel, BorderLayout.EAST);
add(toolbarPanel, BorderLayout.NORTH);
// 主内容区
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
// 表格面板
String[] columns = {"ID", "标题", "作者", "分类", "创建时间", "浏览量"};
tableModel = new DefaultTableModel(columns, 0);
articleTable = new JTable(tableModel);
articleTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane tableScrollPane = new JScrollPane(articleTable);
splitPane.setLeftComponent(tableScrollPane);
// 内容预览面板
JPanel contentPanel = new JPanel(new BorderLayout());
contentPanel.add(new JLabel(" 文章内容预览: "), BorderLayout.NORTH);
contentArea = new JTextArea();
contentArea.setEditable(false);
JScrollPane contentScrollPane = new JScrollPane(contentArea);
contentPanel.add(contentScrollPane, BorderLayout.CENTER);
splitPane.setRightComponent(contentPanel);
splitPane.setDividerLocation(550);
add(splitPane, BorderLayout.CENTER);
// 底部状态栏
JPanel statusPanel = new JPanel();
JLabel statusLabel = new JLabel("共 0 篇文章");
statusPanel.add(statusLabel);
add(statusPanel, BorderLayout.SOUTH);
// 事件监听
searchButton.addActionListener(e -> searchArticles());
showAllButton.addActionListener(e -> loadArticles());
addButton.addActionListener(e -> showAddDialog());
editButton.addActionListener(e -> showEditDialog());
deleteButton.addActionListener(e -> deleteArticle());
viewButton.addActionListener(e -> viewArticle());
refreshButton.addActionListener(e -> loadArticles());
// 表格点击事件
articleTable.getSelectionModel().addListSelectionListener(e -> {
int selectedRow = articleTable.getSelectedRow();
if (selectedRow >= 0) {
Long id = (Long) tableModel.getValueAt(selectedRow, 0);
Article article = articleService.getArticle(id);
if (article != null) {
contentArea.setText(article.getContent());
}
}
});
// 存储statusLabel引用以备更新
getContentPane().putClientProperty("statusLabel", statusLabel);
}
private void showAddDialog() {
JDialog dialog = new JDialog(this, "添加文章", true);
dialog.setSize(500, 400);
dialog.setLocationRelativeTo(this);
JPanel panel = new JPanel(new GridLayout(5, 2, 5, 5));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JTextField titleField = new JTextField();
JTextField authorField = new JTextField();
JTextField categoryField = new JTextField();
JTextArea contentTextArea = new JTextArea(5, 20);
panel.add(new JLabel("标题: "));
panel.add(titleField);
panel.add(new JLabel("作者: "));
panel.add(authorField);
panel.add(new JLabel("分类: "));
panel.add(categoryField);
panel.add(new JLabel("内容: "));
JScrollPane contentScroll = new JScrollPane(contentTextArea);
panel.add(contentScroll);
JButton saveButton = new JButton("保存");
JButton cancelButton = new JButton("取消");
panel.add(saveButton);
panel.add(cancelButton);
saveButton.addActionListener(e -> {
if (titleField.getText().trim().isEmpty()) {
JOptionPane.showMessageDialog(dialog, "标题不能为空!");
return;
}
boolean success = articleService.createArticle(
titleField.getText(),
authorField.getText(),
categoryField.getText(),
contentTextArea.getText()
);
if (success) {
JOptionPane.showMessageDialog(dialog, "文章添加成功!");
dialog.dispose();
loadArticles();
} else {
JOptionPane.showMessageDialog(dialog, "文章添加失败!");
}
});
cancelButton.addActionListener(e -> dialog.dispose());
dialog.add(panel);
dialog.setVisible(true);
}
private void showEditDialog() {
int selectedRow = articleTable.getSelectedRow();
if (selectedRow < 0) {
JOptionPane.showMessageDialog(this, "请先选择要编辑的文章!");
return;
}
Long id = (Long) tableModel.getValueAt(selectedRow, 0);
Article article = articleService.getArticle(id);
if (article == null) {
JOptionPane.showMessageDialog(this, "文章不存在!");
return;
}
JDialog dialog = new JDialog(this, "编辑文章", true);
dialog.setSize(500, 400);
dialog.setLocationRelativeTo(this);
JPanel panel = new JPanel(new GridLayout(5, 2, 5, 5));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JTextField titleField = new JTextField(article.getTitle());
JTextField authorField = new JTextField(article.getAuthor());
JTextField categoryField = new JTextField(article.getCategory());
JTextArea contentTextArea = new JTextArea(article.getContent(), 5, 20);
panel.add(new JLabel("标题: "));
panel.add(titleField);
panel.add(new JLabel("作者: "));
panel.add(authorField);
panel.add(new JLabel("分类: "));
panel.add(categoryField);
panel.add(new JLabel("内容: "));
JScrollPane contentScroll = new JScrollPane(contentTextArea);
panel.add(contentScroll);
JButton updateButton = new JButton("更新");
JButton cancelButton = new JButton("取消");
panel.add(updateButton);
panel.add(cancelButton);
updateButton.addActionListener(e -> {
boolean success = articleService.updateArticle(
id,
titleField.getText(),
authorField.getText(),
categoryField.getText(),
contentTextArea.getText()
);
if (success) {
JOptionPane.showMessageDialog(dialog, "文章更新成功!");
dialog.dispose();
loadArticles();
} else {
JOptionPane.showMessageDialog(dialog, "文章更新失败!");
}
});
cancelButton.addActionListener(e -> dialog.dispose());
dialog.add(panel);
dialog.setVisible(true);
}
private void deleteArticle() {
int selectedRow = articleTable.getSelectedRow();
if (selectedRow < 0) {
JOptionPane.showMessageDialog(this, "请先选择要删除的文章!");
return;
}
int confirm = JOptionPane.showConfirmDialog(this,
"确定要删除这篇文章吗?", "确认删除", JOptionPane.YES_NO_OPTION);
if (confirm == JOptionPane.YES_OPTION) {
Long id = (Long) tableModel.getValueAt(selectedRow, 0);
if (articleService.deleteArticle(id)) {
JOptionPane.showMessageDialog(this, "文章删除成功!");
loadArticles();
} else {
JOptionPane.showMessageDialog(this, "文章删除失败!");
}
}
}
private void viewArticle() {
int selectedRow = articleTable.getSelectedRow();
if (selectedRow < 0) {
JOptionPane.showMessageDialog(this, "请先选择要查看的文章!");
return;
}
Long id = (Long) tableModel.getValueAt(selectedRow, 0);
Article article = articleService.getArticle(id);
if (article != null) {
new ArticleDetailDialog(this, article).setVisible(true);
loadArticles(); // 更新浏览量
}
}
private void loadArticles() {
tableModel.setRowCount(0);
List<Article> articles = articleService.getAllArticles();
for (Article article : articles) {
Object[] row = {
article.getId(),
article.getTitle(),
article.getAuthor(),
article.getCategory(),
article.getCreateTime().toString(),
article.getViewCount()
};
tableModel.addRow(row);
}
updateStatusLabel();
}
private void searchArticles() {
String keyword = searchField.getText().trim();
if (keyword.isEmpty()) {
loadArticles();
return;
}
tableModel.setRowCount(0);
List<Article> articles = articleService.searchArticles(keyword);
for (Article article : articles) {
Object[] row = {
article.getId(),
article.getTitle(),
article.getAuthor(),
article.getCategory(),
article.getCreateTime().toString(),
article.getViewCount()
};
tableModel.addRow(row);
}
updateStatusLabel();
}
private void updateStatusLabel() {
JLabel statusLabel = (JLabel) getContentPane().getClientProperty("statusLabel");
if (statusLabel != null) {
statusLabel.setText("共 " + tableModel.getRowCount() + " 篇文章");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new ArticleApp().setVisible(true);
});
}
}
ArticleDetailDialog.java
package com.example.article.gui;
import com.example.article.entity.Article;
import javax.swing.*;
import java.awt.*;
public class ArticleDetailDialog extends JDialog {
public ArticleDetailDialog(JFrame parent, Article article) {
super(parent, "文章详情", true);
setSize(600, 500);
setLocationRelativeTo(parent);
JPanel panel = new JPanel(new BorderLayout(10, 10));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
// 标题和基本信息
JPanel headerPanel = new JPanel(new BorderLayout());
JLabel titleLabel = new JLabel(article.getTitle());
titleLabel.setFont(new Font("Arial", Font.BOLD, 18));
headerPanel.add(titleLabel, BorderLayout.NORTH);
JPanel metaPanel = new JPanel();
metaPanel.add(new JLabel("作者: " + article.getAuthor()));
metaPanel.add(new JLabel(" 分类: " + article.getCategory()));
metaPanel.add(new JLabel(" 发布时间: " + article.getCreateTime()));
metaPanel.add(new JLabel(" 浏览量: " + article.getViewCount()));
headerPanel.add(metaPanel, BorderLayout.CENTER);
panel.add(headerPanel, BorderLayout.NORTH);
// 内容
JTextArea contentTextArea = new JTextArea(article.getContent());
contentTextArea.setEditable(false);
contentTextArea.setFont(new Font("宋体", Font.PLAIN, 14));
JScrollPane scrollPane = new JScrollPane(contentTextArea);
panel.add(scrollPane, BorderLayout.CENTER);
// 关闭按钮
JButton closeButton = new JButton("关闭");
closeButton.addActionListener(e -> dispose());
JPanel bottomPanel = new JPanel();
bottomPanel.add(closeButton);
panel.add(bottomPanel, BorderLayout.SOUTH);
add(panel);
}
}
数据库建表SQL
CREATE DATABASE IF NOT EXISTS article_db DEFAULT CHARACTER SET utf8mb4;
USE article_db;
CREATE TABLE IF NOT EXISTS articles (
id BIGINT PRIMARY KEY AUTO_INCREMENT,VARCHAR(200) NOT NULL,
author VARCHAR(50) DEFAULT '匿名',
category VARCHAR(50),
content TEXT,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
view_count INT DEFAULT 0,
INDEX idx_category (category),
INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
运行说明
-
环境要求:
- JDK 8+
- MySQL 5.7+
- MySQL JDBC驱动包
-
运行步骤:
- 创建数据库并执行SQL脚本
- 修改DBUtil.java中的数据库连接信息
- 导入MySQL JDBC驱动jar包
- 编译并运行ArticleApp.java
功能特点
- 文章CRUD操作:完整的新增、查看、编辑、删除功能
- 搜索功能:支持按标题、作者、分类搜索
- 浏览量统计:自动增加文章点击量
- GUI界面:使用Java Swing开发美观的桌面界面
- 敏感度展示:实时预览文章内容
这个案例展示了Java在桌面应用开发中的应用,包括数据库操作、面向对象设计、Swing GUI编程等核心技能。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播