Skip to content

Commit 369620b

Browse files
committed
实现插件自定义 LOGO
1 parent fd6ba53 commit 369620b

20 files changed

Lines changed: 70 additions & 16 deletions

src/main/java/com/xwintop/xJavaFxTool/model/PluginJarInfo.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.xwintop.xJavaFxTool.model;
22

33
import com.alibaba.fastjson.annotation.JSONField;
4-
import lombok.Data;
5-
64
import java.io.File;
5+
import lombok.Data;
76

87
/**
98
* 插件信息
@@ -64,4 +63,10 @@ public class PluginJarInfo {
6463
public File getFile() {
6564
return new File("libs/", getJarName() + "-" + getVersion() + ".jar");
6665
}
66+
67+
@JSONField(serialize = false)
68+
public String getDefaultIconPath() {
69+
return bundleName == null ? "" :
70+
(bundleName.replace("locale.", "/logo/") + ".png");
71+
}
6772
}

src/main/java/com/xwintop/xJavaFxTool/newui/NewLauncherController.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@
77
import com.xwintop.xJavaFxTool.services.index.SystemSettingService;
88
import com.xwintop.xcore.javafx.dialog.FxAlerts;
99
import com.xwintop.xcore.util.javafx.JavaFxViewUtil;
10-
import javafx.fxml.FXMLLoader;
11-
import javafx.scene.Parent;
12-
import javafx.scene.layout.VBox;
13-
import lombok.extern.slf4j.Slf4j;
14-
1510
import java.io.IOException;
1611
import java.util.HashMap;
1712
import java.util.List;
1813
import java.util.Map;
1914
import java.util.ResourceBundle;
15+
import javafx.fxml.FXMLLoader;
16+
import javafx.scene.Parent;
17+
import javafx.scene.layout.VBox;
18+
import lombok.extern.slf4j.Slf4j;
2019

2120
@Slf4j
2221
public class NewLauncherController {
@@ -60,7 +59,7 @@ public void initialize() {
6059
}
6160
);
6261

63-
PluginItemController item = PluginItemController.newInstance(pluginName);
62+
PluginItemController item = PluginItemController.newInstance(jarInfo);
6463
category.addItem(item);
6564
}
6665
}
Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,62 @@
11
package com.xwintop.xJavaFxTool.newui;
22

3+
import com.xwintop.xJavaFxTool.model.PluginJarInfo;
4+
import com.xwintop.xJavaFxTool.utils.ResourceUtils;
35
import com.xwintop.xcore.javafx.helper.FxmlHelper;
6+
import java.net.URL;
47
import javafx.fxml.FXMLLoader;
58
import javafx.scene.control.Label;
9+
import javafx.scene.image.Image;
10+
import javafx.scene.image.ImageView;
611
import javafx.scene.layout.VBox;
12+
import lombok.extern.slf4j.Slf4j;
713

14+
@Slf4j
815
public class PluginItemController {
916

10-
public static PluginItemController newInstance(String pluginName) {
11-
FXMLLoader fxmlLoader = FxmlHelper.loadFromResource(
12-
"/com/xwintop/xJavaFxTool/fxmlView/newui/plugin-item.fxml"
13-
);
17+
public static final String FXML_PATH = "/com/xwintop/xJavaFxTool/fxmlView/newui/plugin-item.fxml";
18+
19+
public static PluginItemController newInstance(PluginJarInfo pluginJarInfo) {
20+
FXMLLoader fxmlLoader = FxmlHelper.loadFromResource(FXML_PATH);
1421
PluginItemController controller = fxmlLoader.getController();
15-
controller.setPluginName(pluginName);
22+
controller.setPluginInfo(pluginJarInfo);
1623
return controller;
1724
}
1825

1926
///////////////////////////////////////////////////////////////
2027

28+
private PluginJarInfo pluginJarInfo;
29+
2130
public Label pluginName;
2231

2332
public VBox root;
2433

34+
public ImageView imgLogo;
35+
2536
public void initialize() {
2637
// 当元素不可见时也从布局流中去掉
2738
this.root.managedProperty().bind(this.root.visibleProperty());
2839
}
2940

30-
public void setPluginName(String pluginName) {
31-
this.pluginName.setText(pluginName);
41+
private void updateIcon() {
42+
URL iconUrl = ResourceUtils.getResource(
43+
this.pluginJarInfo.getIconPath(),
44+
this.pluginJarInfo.getDefaultIconPath(),
45+
"/logo/plugin.png"
46+
);
47+
48+
if (iconUrl != null) {
49+
String url = iconUrl.toExternalForm();
50+
if (url.endsWith("plugin.png")) {
51+
log.info("please add logo to " + this.pluginJarInfo.getDefaultIconPath());
52+
}
53+
imgLogo.setImage(new Image(url));
54+
}
55+
}
56+
57+
private void setPluginInfo(PluginJarInfo pluginJarInfo) {
58+
this.pluginJarInfo = pluginJarInfo;
59+
this.pluginName.setText(pluginJarInfo.getName());
60+
updateIcon();
3261
}
3362
}

src/main/java/com/xwintop/xJavaFxTool/plugin/PluginParser.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ public static void parse(File pluginFile, PluginJarInfo pluginJarInfo) throws IO
4242
menuTitles.put(menuElement.attributeValue("menuId"), menuElement.attributeValue("title"));
4343
}
4444

45+
String resourceBundleName = pluginElement.selectSingleNode("child::resourceBundleName").getText();
4546
String menuId = pluginElement.selectSingleNode("child::menuParentId").getText();
4647
String menuTitle = menuTitles.get(menuId);
4748

4849
pluginJarInfo.setMenuParentTitle(menuTitle);
50+
pluginJarInfo.setBundleName(resourceBundleName);
4951
}
5052

5153
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.xwintop.xJavaFxTool.utils;
2+
3+
import java.net.URL;
4+
import org.apache.commons.lang.StringUtils;
5+
6+
public class ResourceUtils {
7+
8+
public static URL getResource(String... candidates) {
9+
for (String candidate : candidates) {
10+
if (StringUtils.isNotBlank(candidate)) {
11+
URL url = ResourceUtils.class.getResource(candidate);
12+
if (url != null) {
13+
return url;
14+
}
15+
}
16+
}
17+
return null;
18+
}
19+
}

src/main/resources/com/xwintop/xJavaFxTool/fxmlView/newui/plugin-item.fxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
fx:controller="com.xwintop.xJavaFxTool.newui.PluginItemController"
99
xmlns:fx="http://javafx.com/fxml/1">
1010
<HBox alignment="CENTER" VBox.vgrow="ALWAYS">
11-
<ImageView fitWidth="48" fitHeight="48">
11+
<ImageView fitWidth="48" fitHeight="48" fx:id="imgLogo">
1212
<Image url="/images/icon.jpg"/>
1313
</ImageView>
1414
</HBox>
3.34 KB
Loading
1.69 KB
Loading
1.43 KB
Loading
1008 Bytes
Loading

0 commit comments

Comments
 (0)