创建专属于每个插件的CustomSplitPane内容

This commit is contained in:
许轲 2023-09-23 09:25:08 +08:00
parent 95d87102b1
commit efe7747cb3

View File

@ -5,12 +5,14 @@ import atlantafx.base.controls.ToggleSwitch;
import atlantafx.base.theme.PrimerLight; import atlantafx.base.theme.PrimerLight;
import javafx.application.Application; import javafx.application.Application;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.Button; import javafx.scene.control.*;
import javafx.scene.control.Label; import javafx.scene.image.Image;
import javafx.scene.control.Tab; import javafx.scene.image.ImageView;
import javafx.scene.control.TabPane;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.StrokeType;
import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.LogUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -26,6 +28,7 @@ import java.util.Map;
*/ */
public class PluginManagementPane extends BorderPane { public class PluginManagementPane extends BorderPane {
public static int ICON_SIZE = 40;
Logger logger = LogUtil.getLogger(this.getClass()); Logger logger = LogUtil.getLogger(this.getClass());
@ -66,8 +69,7 @@ public class PluginManagementPane extends BorderPane {
marketTabContent.setCenter(customSplitPane); marketTabContent.setCenter(customSplitPane);
// 获取插件列表 // 获取插件列表
var box = getBox(); customSplitPane.setLeftContent(getScrollPane());
customSplitPane.setLeftContent(box);
// 创建示例按钮并添加到已安装和设置选项卡中 // 创建示例按钮并添加到已安装和设置选项卡中
installedTabContent.setCenter(new Button("2")); installedTabContent.setCenter(new Button("2"));
@ -86,20 +88,46 @@ public class PluginManagementPane extends BorderPane {
} }
/** /**
* 创建包含插件列表的VBox * 创建包含插件列表的VBox并将其包装在滚动面板中
* *
* @return 包含插件列表的VBox * @return 包含插件列表的滚动面板
*/ */
private VBox getBox() { private ScrollPane getScrollPane() {
// 创建示例插件列表项 // 创建示例插件列表项
var tile1 = createTile("运行插件", "这是一个运行插件\t\t\t\t\t\t\t "); var image1 = new Image("icon.png");
var tile2 = createTile("终端插件", "这是一个终端插件"); var tile1 = createTile("运行插件", "这是一个运行插件\t\t\t\t\t\t", image1);
var tile3 = createTile("构建插件", "这是一个构建插件");
var image2 = new Image("icon.png");
var tile2 = createTile("终端插件", "这是一个终端插件", image2);
var image3 = new Image("icon.png");
var tile3 = createTile("构建插件", "这是一个构建插件", image3);
var image4 = new Image("icon.png");
var tile4 = createTile("1", "这是一个构建插件", image4);
var image5 = new Image("icon.png");
var tile5 = createTile("2", "这是一个构建插件", image5);
var image6 = new Image("icon.png");
var tile6 = createTile("4", "这是一个构建插件", image6);
var image7 = new Image("icon.png");
var tile7 = createTile("5", "这是一个构建插件", image7);
// 创建VBox并将插件列表项添加到其中 // 创建VBox并将插件列表项添加到其中
var box = new VBox(tile1, tile2, tile3); var box = new VBox(tile1, tile2, tile3, tile4, tile5, tile6, tile7);
return box; // 创建滚动面板并将VBox设置为其内容
var scrollPane = new ScrollPane(box);
// 设置滚动面板的宽度适应父容器
scrollPane.setFitToWidth(true);
// 隐藏滚动条
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
return scrollPane;
} }
/** /**
@ -107,39 +135,59 @@ public class PluginManagementPane extends BorderPane {
* *
* @param title 插件标题 * @param title 插件标题
* @param description 插件描述 * @param description 插件描述
* @param image 插件图标
* @return 创建的插件列表项Tile * @return 创建的插件列表项Tile
*/ */
private Tile createTile(String title, String description) { private Tile createTile(String title, String description, Image image) {
// 创建一个title
var tile = new Tile(title, description); var tile = new Tile(title, description);
// 创建一个按钮
var tgl = new ToggleSwitch(); var tgl = new ToggleSwitch();
// 创建一个图标
ImageView icon = new ImageView(image);
// 指定要缩放的固定像素大小
double iconSize = ICON_SIZE;
// 设置图像视图的宽度和高度以便等比例缩放到指定像素大小
icon.setFitWidth(iconSize);
icon.setFitHeight(iconSize);
// 设置Tile的图标
tile.setGraphic(icon);
// 设置Tile的操作和操作处理程序 // 设置Tile的操作和操作处理程序
tile.setAction(tgl); tile.setAction(tgl);
tile.setActionHandler(() -> { tile.setActionHandler(() -> {
customSplitPane.setRightContent(tileContentMap.get(tile)); customSplitPane.setRightContent(tileContentMap.get(tile));
logger.info("点击了" + tile); logger.info("点击了" + tile);
}); });
// 创建专属的customSplitPane内容 // 创建专属的customSplitPane内容
var content = createCustomSplitPaneContent(title); var content = createCustomSplitPaneContent(title);
// 将内容与Tile关联起来 // 将内容与Tile关联起来
tileContentMap.put(tile, content); tileContentMap.put(tile, content);
return tile; return tile;
} }
/** /**
* 创建专属于每个插件的CustomSplitPane内容 * 创建专属于每个插件的CustomSplitPane内容
* *
* @param title 插件标题 * @param titleName 插件标题
* @return 创建的CustomSplitPane内容 * @return 创建的CustomSplitPane内容
*/ */
private Node createCustomSplitPaneContent(String title) { private Node createCustomSplitPaneContent(String titleName) {
// TODO: 2023/9/23 未完成 VBox content = new VBox();
return new Label("详情" + title);
Label titleLabel = new Label(titleName);
Label descriptionLabel = new Label("插件描述插件描述插件描述");
content.getChildren().addAll(titleLabel, descriptionLabel);
return content;
} }
} }