Skip to content
This repository was archived by the owner on Dec 14, 2025. It is now read-only.

Commit 7f4ac2d

Browse files
committed
feat(ui): 添加趣味功能模块并实现 Tab 页切换
- 在 MainView 中添加趣味功能按钮和对应的视图 - 实现 TabPane 组件,增加多个标签页 - 添加左侧边栏,包含账户、游戏、趣味功能等选项 - 优化导航逻辑,实现内容区域的动态切换 - 新增 MoreFeaturesView 组件用于展示趣味功能
1 parent f8182cf commit 7f4ac2d

File tree

3 files changed

+928
-0
lines changed

3 files changed

+928
-0
lines changed

.github/workflows/build.yml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
name: Build MDCL
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
workflow_dispatch:
9+
10+
jobs:
11+
build:
12+
strategy:
13+
fail-fast: false # 添加此行,防止一个平台失败导致所有平台都停止
14+
matrix:
15+
os: [ubuntu-latest, windows-latest, macos-latest]
16+
include:
17+
- os: ubuntu-latest
18+
outputType: deb
19+
- os: windows-latest
20+
outputType: exe
21+
- os: macos-latest
22+
outputType: dmg
23+
24+
runs-on: ${{ matrix.os }}
25+
26+
steps:
27+
- uses: actions/checkout@v3
28+
with:
29+
fetch-depth: 0
30+
31+
- name: Set up JDK 21
32+
uses: actions/setup-java@v3
33+
with:
34+
java-version: '21'
35+
distribution: 'temurin'
36+
cache: maven
37+
38+
- name: Debug Info
39+
run: |
40+
pwd
41+
ls -la
42+
echo "Checking for pom.xml:"
43+
find . -name pom.xml
44+
shell: bash
45+
46+
- name: Build with Maven
47+
run: |
48+
if [ ! -f "pom.xml" ]; then
49+
echo "Error: pom.xml not found in current directory"
50+
exit 1
51+
fi
52+
mvn -B clean package --file pom.xml -X
53+
if [ $? -ne 0 ]; then
54+
echo "Maven build failed"
55+
exit 1
56+
fi
57+
shell: bash
58+
59+
- name: Package with jpackage (macOS)
60+
if: matrix.os == 'macos-latest'
61+
run: |
62+
jpackage --input target/ \
63+
--name MDCL \
64+
--main-jar MDCL-main-1.0-SNAPSHOT.jar \
65+
--main-class org.mcdcl.Main \
66+
--type dmg \
67+
--app-version 1.0.0 \
68+
--vendor "MDCL" \
69+
--mac-package-name "MDCL"
70+
71+
- name: Package with jpackage (Windows)
72+
if: matrix.os == 'windows-latest'
73+
run: |
74+
jpackage --input target/ `
75+
--name MDCL `
76+
--main-jar MDCL-main-1.0-SNAPSHOT.jar `
77+
--main-class org.mcdcl.Main `
78+
--type exe `
79+
--app-version 1.0.0 `
80+
--vendor "MDCL" `
81+
--win-shortcut
82+
shell: pwsh
83+
84+
- name: Package with jpackage (Linux)
85+
if: matrix.os == 'ubuntu-latest'
86+
run: |
87+
jpackage --input target/ \
88+
--name MDCL \
89+
--main-jar MDCL-main-1.0-SNAPSHOT.jar \
90+
--main-class org.mcdcl.Main \
91+
--type deb \
92+
--app-version 1.0.0 \
93+
--vendor "MDCL" \
94+
--linux-shortcut
95+
96+
- name: Upload artifacts
97+
uses: actions/upload-artifact@v3
98+
with:
99+
name: MDCL-${{ matrix.os }}
100+
path: |
101+
*.dmg
102+
*.exe
103+
*.deb
104+
if-no-files-found: ignore

src/main/java/org/mcdcl/ui/MainView.java

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
import javafx.scene.layout.BorderPane; // 添加这个导入
2525
import javafx.scene.layout.StackPane; // 修改图标包导入
2626
import javafx.scene.layout.VBox;
27+
import javafx.scene.control.Tab;
28+
import javafx.scene.control.TabPane;
2729

2830
public class MainView extends BorderPane {
31+
private TabPane tabPane;
2932
private VBox navigationBar;
3033
private StackPane contentArea;
3134
private LaunchConfigView launchConfigView;
@@ -39,6 +42,9 @@ public class MainView extends BorderPane {
3942
private GameLauncher gameLauncher;
4043

4144
public MainView() {
45+
// 在构造函数开始处初始化 TabPane
46+
tabPane = new TabPane();
47+
4248
// 初始化组件
4349
launchConfigView = new LaunchConfigView();
4450
userInfoLabel = new Label("V0.3Beta");
@@ -94,6 +100,16 @@ public MainView() {
94100
backButton.setVisible(true);
95101
});
96102
gameSection.getChildren().add(versionsButton);
103+
104+
// 添加趣味功能按钮
105+
Button funFeaturesButton = createNavButton("趣味功能");
106+
funFeaturesButton.setOnAction(event -> {
107+
contentArea.getChildren().clear();
108+
MoreFeaturesView moreFeaturesView = new MoreFeaturesView();
109+
contentArea.getChildren().addAll(moreFeaturesView, backButton);
110+
backButton.setVisible(true);
111+
});
112+
gameSection.getChildren().add(funFeaturesButton);
97113

98114
// 创建启动游戏按钮
99115
launchButton = new Button("启动游戏");
@@ -183,6 +199,9 @@ private Button createNavButton(String text) {
183199
case "关于":
184200
icon = new FontIcon(MaterialDesignI.INFORMATION);
185201
break;
202+
case "趣味功能":
203+
icon = new FontIcon(MaterialDesignI.INFORMATION);
204+
break;
186205
}
187206

188207
if (icon != null) {
@@ -433,4 +452,104 @@ private void loadSettings() {
433452
// 使用默认设置
434453
}
435454
}
455+
456+
private void initializeTabs() {
457+
// 添加趣味功能标签页
458+
Tab moreFeaturesTab = new Tab("趣味功能");
459+
moreFeaturesTab.setContent(new MoreFeaturesView());
460+
moreFeaturesTab.setClosable(false);
461+
tabPane.getTabs().add(moreFeaturesTab);
462+
463+
// ... 现有代码 ...
464+
}
465+
466+
private VBox createSidebar() {
467+
VBox sidebar = new VBox(10);
468+
sidebar.setPadding(new Insets(20));
469+
sidebar.setStyle("-fx-background-color: rgba(0, 0, 0, 0.5);");
470+
sidebar.setPrefWidth(200);
471+
472+
// 账户部分
473+
Label accountLabel = new Label("账户");
474+
accountLabel.getStyleClass().add("sidebar-section");
475+
476+
Button accountSettingsBtn = new Button("账户设置");
477+
accountSettingsBtn.getStyleClass().add("sidebar-button");
478+
accountSettingsBtn.setOnAction(e -> {
479+
contentArea.getChildren().clear();
480+
AccountSettingsView accountSettingsView = new AccountSettingsView();
481+
contentArea.getChildren().addAll(accountSettingsView, backButton);
482+
backButton.setVisible(true);
483+
});
484+
485+
// 游戏部分
486+
Label gameLabel = new Label("游戏");
487+
gameLabel.getStyleClass().add("sidebar-section");
488+
489+
Button versionsBtn = new Button("版本列表");
490+
versionsBtn.getStyleClass().add("sidebar-button");
491+
versionsBtn.setOnAction(e -> {
492+
contentArea.getChildren().clear();
493+
VersionView versionView = new VersionView();
494+
495+
// 为选择版本按钮添加事件处理器
496+
versionView.getSelectButton().setOnAction(event -> {
497+
String selectedVersion = versionView.getVersionList().getSelectionModel().getSelectedItem();
498+
if (selectedVersion != null && !selectedVersion.isEmpty()) {
499+
launchGame(selectedVersion);
500+
} else {
501+
showAlert("未选择版本", "请先从列表中选择一个游戏版本");
502+
}
503+
});
504+
505+
contentArea.getChildren().addAll(versionView, backButton);
506+
backButton.setVisible(true);
507+
});
508+
509+
// 趣味功能部分
510+
Label funLabel = new Label("趣味功能");
511+
funLabel.getStyleClass().add("sidebar-section");
512+
513+
Button funFeaturesBtn = new Button("趣味功能");
514+
funFeaturesBtn.getStyleClass().add("sidebar-button");
515+
funFeaturesBtn.setOnAction(e -> showFunFeatures());
516+
517+
// 通用部分
518+
Label generalLabel = new Label("通用");
519+
generalLabel.getStyleClass().add("sidebar-section");
520+
521+
Button settingsBtn = new Button("常规设置");
522+
settingsBtn.getStyleClass().add("sidebar-button");
523+
settingsBtn.setOnAction(e -> {
524+
contentArea.getChildren().clear();
525+
settingsView = new SettingsView();
526+
contentArea.getChildren().addAll(settingsView, backButton);
527+
backButton.setVisible(true);
528+
});
529+
530+
Button aboutBtn = new Button("关于");
531+
aboutBtn.getStyleClass().add("sidebar-button");
532+
aboutBtn.setOnAction(e -> {
533+
contentArea.getChildren().clear();
534+
AboutView aboutView = new AboutView();
535+
contentArea.getChildren().addAll(aboutView, backButton);
536+
backButton.setVisible(true);
537+
});
538+
539+
sidebar.getChildren().addAll(
540+
accountLabel, accountSettingsBtn,
541+
gameLabel, versionsBtn,
542+
funLabel, funFeaturesBtn,
543+
generalLabel, settingsBtn, aboutBtn
544+
);
545+
546+
return sidebar;
547+
}
548+
549+
private void showFunFeatures() {
550+
contentArea.getChildren().clear();
551+
MoreFeaturesView moreFeaturesView = new MoreFeaturesView();
552+
contentArea.getChildren().addAll(moreFeaturesView, backButton);
553+
backButton.setVisible(true);
554+
}
436555
}

0 commit comments

Comments
 (0)