update timi-inject

This commit is contained in:
Timi
2026-01-14 14:54:15 +08:00
parent 40f556d0e1
commit 68f39aa834
20 changed files with 108 additions and 172 deletions

5
.gitignore vendored
View File

@ -1,3 +1,8 @@
/.claude
/CLAUDE.md
/AGENTS.md
/logs
target/ target/
!.mvn/wrapper/maven-wrapper.jar !.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/ !**/src/main/**/target/

18
pom.xml
View File

@ -6,7 +6,7 @@
<groupId>com.imyeyu.fx.ui</groupId> <groupId>com.imyeyu.fx.ui</groupId>
<artifactId>timi-fx-ui</artifactId> <artifactId>timi-fx-ui</artifactId>
<version>0.0.1</version> <version>0.0.2</version>
<properties> <properties>
<maven.test.skip>true</maven.test.skip> <maven.test.skip>true</maven.test.skip>
@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>com.imyeyu.fx</groupId> <groupId>com.imyeyu.fx</groupId>
<artifactId>timi-fx</artifactId> <artifactId>timi-fx</artifactId>
<version>0.0.1</version> <version>0.0.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.imyeyu.fx.icon</groupId> <groupId>com.imyeyu.fx.icon</groupId>
@ -29,7 +29,7 @@
<dependency> <dependency>
<groupId>com.imyeyu.lang</groupId> <groupId>com.imyeyu.lang</groupId>
<artifactId>timi-lang</artifactId> <artifactId>timi-lang</artifactId>
<version>0.0.1</version> <version>0.0.2</version>
</dependency> </dependency>
<!-- 演示程序依赖 --> <!-- 演示程序依赖 -->
<dependency> <dependency>
@ -41,13 +41,13 @@
<dependency> <dependency>
<groupId>com.imyeyu.network</groupId> <groupId>com.imyeyu.network</groupId>
<artifactId>timi-network</artifactId> <artifactId>timi-network</artifactId>
<version>0.0.1</version> <version>0.0.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.imyeyu.config</groupId> <groupId>com.imyeyu.config</groupId>
<artifactId>timi-config</artifactId> <artifactId>timi-config</artifactId>
<version>0.0.1</version> <version>0.0.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -59,7 +59,13 @@
<dependency> <dependency>
<groupId>com.imyeyu.inject</groupId> <groupId>com.imyeyu.inject</groupId>
<artifactId>timi-inject</artifactId> <artifactId>timi-inject</artifactId>
<version>0.0.1</version> <version>0.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.24</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -150,7 +150,7 @@ public abstract class VersionLabel<T> extends VBox implements TimiFXUI, TimiFXUI
@Override @Override
protected void onException(Throwable e) { protected void onException(Throwable e) {
version.setText(TimiFXUI.MULTILINGUAL.textArgs("version.fail", nowVersion)); version.setText(TimiFXUI.MULTILINGUAL.text("version.fail"));
version.setOnMouseClicked(event -> checkVersion(nowVersion)); version.setOnMouseClicked(event -> checkVersion(nowVersion));
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -183,7 +183,7 @@ public abstract class AbstractAlertFile extends AbstractAlert implements TimiFXU
if (file.exists()) { if (file.exists()) {
tree.selectItem(file); tree.selectItem(file);
} else { } else {
AlertTips.error(this, TimiFXUI.MULTILINGUAL.textArgs("file.tips.not_found_target", absolutePath.getText())); AlertTips.error(this, TimiFXUI.MULTILINGUAL.text("file.tips.not_found_target"));
} }
} }
}); });

View File

@ -1,20 +1,17 @@
package com.imyeyu.fx.ui.examples; package com.imyeyu.fx.ui.examples;
import com.imyeyu.inject.InjectApp;
import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import com.imyeyu.config.ConfigLoader; import com.imyeyu.config.ConfigLoader;
import com.imyeyu.fx.config.BindingsConfig; import com.imyeyu.fx.config.BindingsConfig;
import com.imyeyu.fx.ui.TimiFXUI; import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.fx.ui.examples.bean.Config; import com.imyeyu.fx.ui.examples.bean.Config;
import com.imyeyu.fx.ui.examples.ctrl.Main; import com.imyeyu.fx.ui.examples.ctrl.Main;
import com.imyeyu.inject.TimiInject;
import com.imyeyu.inject.annotation.TimiInjectApplication; import com.imyeyu.inject.annotation.TimiInjectApplication;
import com.imyeyu.java.bean.Language; import com.imyeyu.java.bean.Language;
import com.imyeyu.lang.multi.ResourcesMultilingual; import com.imyeyu.lang.multi.ResourcesMultilingual;
import javafx.application.Application;
import java.util.Map; import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
/** /**
* TimiFX 示例程序 * TimiFX 示例程序
@ -36,31 +33,23 @@ public class TimiFXExamples {
private static ConfigLoader<Config> configLoader; private static ConfigLoader<Config> configLoader;
@Getter @Getter
private static InjectApp injectApp; public static TimiInject inject;
public static void main(String[] args) { public static void main(String[] args) {
try { {
injectApp = new InjectApp(TimiFXExamples.class); configLoader = new ConfigLoader<>("TimiFXExamples.yaml", Config.class);
{ BindingsConfig.addAllFXConverter(configLoader);
configLoader = new ConfigLoader<>("TimiFXExamples.yaml", Config.class); config = configLoader.load();
for (Map.Entry<Class<?>, BindingsConfig.PropertyConverter<?, ?>> item : BindingsConfig.DEFAULT_CONVERTER_MAP.entrySet()) {
configLoader.addConverter(item.getKey(), item.getValue());
}
configLoader.addConverter(ObjectProperty.class, BindingsConfig.OBJECT);
config = configLoader.load();
ResourcesMultilingual multilingual = TimiFXUI.MULTILINGUAL; ResourcesMultilingual multilingual = TimiFXUI.MULTILINGUAL;
multilingual.addAll("lang/timi-fx-ui/%s.lang"); multilingual.addAll("lang/timi-fx-ui/%s.lang");
multilingual.addAll("lang/%s.lang"); multilingual.addAll("lang/%s.lang");
multilingual.setActivated(Language.zh_CN); multilingual.setActivated(Language.Enum.zh_CN);
// 禁止系统 DPI 缩放 // 禁止系统 DPI 缩放
System.setProperty("prism.allowhidpi", "false"); System.setProperty("prism.allowhidpi", "false");
System.setProperty("glass.win.minHiDPI", "1"); System.setProperty("glass.win.minHiDPI", "1");
}
Application.launch(Main.class);
} catch (Exception e) {
log.error("fatal error", e);
} }
Application.launch(Main.class);
} }
} }

View File

@ -1,9 +1,9 @@
package com.imyeyu.fx.ui.examples.bean; package com.imyeyu.fx.ui.examples.bean;
import com.imyeyu.java.bean.Language;
import javafx.beans.property.DoubleProperty; import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import lombok.Data; import lombok.Data;
import com.imyeyu.java.bean.Language;
/** /**
* @author 夜雨 * @author 夜雨
@ -12,7 +12,7 @@ import com.imyeyu.java.bean.Language;
@Data @Data
public class Config { public class Config {
private ObjectProperty<Language> language; private ObjectProperty<Language.Enum> language;
private DoubleProperty width; private DoubleProperty width;

View File

@ -1,10 +1,6 @@
package com.imyeyu.fx.ui.examples.component; package com.imyeyu.fx.ui.examples.component;
import com.imyeyu.fx.ui.TimiFXUI; import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.fx.ui.examples.service.PageService;
import com.imyeyu.inject.annotation.Inject;
import com.imyeyu.inject.annotation.StaticInject;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
/** /**
@ -13,12 +9,8 @@ import javafx.scene.layout.BorderPane;
* @author 夜雨 * @author 夜雨
* @since 2022-08-26 14:55 * @since 2022-08-26 14:55
*/ */
@StaticInject
public abstract class AbstractPane extends BorderPane implements TimiFXUI { public abstract class AbstractPane extends BorderPane implements TimiFXUI {
@Inject
private static PageService pageService;
/** 显示时触发UI 线程 */ /** 显示时触发UI 线程 */
protected void onShow() { protected void onShow() {
// 子类实现 // 子类实现
@ -29,15 +21,6 @@ public abstract class AbstractPane extends BorderPane implements TimiFXUI {
// 子类实现 // 子类实现
} }
/**
* 跳转页面
*
* @param page 页面
*/
protected final void toPage(SidebarItem page) {
pageService.to(page);
}
/** 显示面板事件,由调用者触发,通常是侧边导航 */ /** 显示面板事件,由调用者触发,通常是侧边导航 */
public final void show() { public final void show() {
onShow(); onShow();

View File

@ -2,9 +2,9 @@ package com.imyeyu.fx.ui.examples.component;
import com.imyeyu.fx.ui.TimiFXUI; import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.fx.ui.examples.component.sidebar.Sidebar; import com.imyeyu.fx.ui.examples.component.sidebar.Sidebar;
import com.imyeyu.fx.ui.examples.service.PageService;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.PostConstruct;
import com.imyeyu.inject.annotation.InvokeForInjected;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
/** /**
@ -16,15 +16,26 @@ import javafx.scene.layout.BorderPane;
@Component @Component
public class RootLayout extends BorderPane implements TimiFXUI { public class RootLayout extends BorderPane implements TimiFXUI {
@Inject private final Sidebar sidebar;
private Sidebar sidebar; private final PageService pageService;
public RootLayout() { public RootLayout(Sidebar sidebar, PageService pageService) {
this.sidebar = sidebar;
this.pageService = pageService;
setBorder(Stroke.TOP); setBorder(Stroke.TOP);
} }
@InvokeForInjected @PostConstruct
public void init() { public void init() {
setLeft(sidebar); setLeft(sidebar);
pageService.activatedPageProperty().addListener((obs, prev, now) -> {
if (now != null && now.getIOCPage() instanceof AbstractPane pane) {
pane.show();
setCenter(pane);
}
if (prev != null && prev.getIOCPage() instanceof AbstractPane pane) {
pane.hide();
}
});
} }
} }

View File

@ -4,7 +4,6 @@ import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.fx.ui.components.Navigation; import com.imyeyu.fx.ui.components.Navigation;
import com.imyeyu.fx.ui.examples.service.PageService; import com.imyeyu.fx.ui.examples.service.PageService;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.inject.annotation.Inject;
import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleButton;
/** /**
@ -16,10 +15,8 @@ import javafx.scene.control.ToggleButton;
@Component @Component
public class Sidebar extends Navigation { public class Sidebar extends Navigation {
@Inject public Sidebar(PageService pageService) {
private PageService pageService;
public Sidebar() {
Item welcome = new Item(SidebarItem.WELCOME); Item welcome = new Item(SidebarItem.WELCOME);
Item style = new Item(SidebarItem.STYLE); Item style = new Item(SidebarItem.STYLE);
Item extendTools = new Item(SidebarItem.EXTEND_TOOLS); Item extendTools = new Item(SidebarItem.EXTEND_TOOLS);
@ -37,25 +34,7 @@ public class Sidebar extends Navigation {
addGroup(TimiFXUI.MULTILINGUAL.text("animation"), interpolator, smoothScroll); addGroup(TimiFXUI.MULTILINGUAL.text("animation"), interpolator, smoothScroll);
// 组件 // 组件
SidebarItem[] components = { SidebarItem[] components = {SidebarItem.CHECK_BOX_PICKER, SidebarItem.DATE_TIME_PICKER, SidebarItem.EDITABLE_TABLE_CELL, SidebarItem.FILE_TREE_VIEW, SidebarItem.ICON_BUTTON, SidebarItem.ICON_PICKER, SidebarItem.LABEL_PROGRESS_BAR, SidebarItem.NAVIGATION, SidebarItem.NUMBER_FIELD, SidebarItem.PROGRESS_SLIDER, SidebarItem.SELECTABLE_LABEL, SidebarItem.TEXT_AREA_EDITOR, SidebarItem.TITLE_LABEL, SidebarItem.TOGGLE_ICON, SidebarItem.X_PAGINATION, SidebarItem.X_TAB_PANE, SidebarItem.X_TREE_VIEW};
SidebarItem.CHECK_BOX_PICKER,
SidebarItem.DATE_TIME_PICKER,
SidebarItem.EDITABLE_TABLE_CELL,
SidebarItem.FILE_TREE_VIEW,
SidebarItem.ICON_BUTTON,
SidebarItem.ICON_PICKER,
SidebarItem.LABEL_PROGRESS_BAR,
SidebarItem.NAVIGATION,
SidebarItem.NUMBER_FIELD,
SidebarItem.PROGRESS_SLIDER,
SidebarItem.SELECTABLE_LABEL,
SidebarItem.TEXT_AREA_EDITOR,
SidebarItem.TITLE_LABEL,
SidebarItem.TOGGLE_ICON,
SidebarItem.X_PAGINATION,
SidebarItem.X_TAB_PANE,
SidebarItem.X_TREE_VIEW
};
Item[] componentItems = new Item[components.length]; Item[] componentItems = new Item[components.length];
for (int i = 0; i < componentItems.length; i++) { for (int i = 0; i < componentItems.length; i++) {
componentItems[i] = new Item(components[i]); componentItems[i] = new Item(components[i]);
@ -101,7 +80,7 @@ public class Sidebar extends Navigation {
* 列表项 * 列表项
* *
* @author 夜雨 * @author 夜雨
* @since 2022-02-22 19:45 * @since 2022-02-22 19:45
*/ */
private static class Item extends ToggleButton { private static class Item extends ToggleButton {

View File

@ -155,6 +155,6 @@ public enum SidebarItem {
/** @return 从 TimiInject 控制反转对象获取该页面 */ /** @return 从 TimiInject 控制反转对象获取该页面 */
public Node getIOCPage() { public Node getIOCPage() {
return TimiFXExamples.getInjectApp().injector().di(page); return TimiFXExamples.getInject().getBean(page);
} }
} }

View File

@ -1,15 +1,13 @@
package com.imyeyu.fx.ui.examples.ctrl; package com.imyeyu.fx.ui.examples.ctrl;
import com.imyeyu.fx.inject.FXTimiInject;
import com.imyeyu.fx.ui.components.TrayFX; import com.imyeyu.fx.ui.components.TrayFX;
import com.imyeyu.fx.ui.examples.TimiFXExamples; import com.imyeyu.fx.ui.examples.TimiFXExamples;
import com.imyeyu.fx.ui.examples.component.sidebar.Sidebar; import com.imyeyu.fx.ui.examples.component.sidebar.Sidebar;
import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem; import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.fx.ui.examples.service.PageService; import com.imyeyu.fx.ui.examples.service.PageService;
import com.imyeyu.fx.ui.examples.view.ViewMain; import com.imyeyu.fx.ui.examples.view.ViewMain;
import com.imyeyu.inject.TimiInject;
import com.imyeyu.inject.annotation.IOCReturn;
import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.Inject;
import com.imyeyu.inject.annotation.SuperInject;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.awt.SplashScreen; import java.awt.SplashScreen;
@ -20,7 +18,6 @@ import java.awt.SplashScreen;
* @author 夜雨 * @author 夜雨
* @since 2022-05-03 15:43 * @since 2022-05-03 15:43
*/ */
@SuperInject
public class Main extends ViewMain { public class Main extends ViewMain {
@Inject @Inject
@ -38,7 +35,7 @@ public class Main extends ViewMain {
public void start(Stage stage) { public void start(Stage stage) {
this.stage = stage; this.stage = stage;
TimiInject.run(TimiFXExamples.getInjectApp()).ioc(this); TimiFXExamples.inject = FXTimiInject.run(TimiFXExamples.class, this, stage);
super.start(stage); super.start(stage);
sidebar.setSelected(SidebarItem.WELCOME); sidebar.setSelected(SidebarItem.WELCOME);
@ -58,10 +55,4 @@ public class Main extends ViewMain {
trayFX.remove(); trayFX.remove();
stage.close(); stage.close();
} }
/** 主窗体 */
@IOCReturn
public Stage getStage() {
return stage;
}
} }

View File

@ -1,14 +1,10 @@
package com.imyeyu.fx.ui.examples.service; package com.imyeyu.fx.ui.examples.service;
import com.imyeyu.fx.ui.examples.component.AbstractPane;
import com.imyeyu.fx.ui.examples.component.RootLayout;
import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem; import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.inject.annotation.Inject;
import com.imyeyu.inject.annotation.Service; import com.imyeyu.inject.annotation.Service;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import lombok.extern.slf4j.Slf4j;
/** /**
* 页面服务 * 页面服务
@ -16,13 +12,9 @@ import lombok.extern.slf4j.Slf4j;
* @author 夜雨 * @author 夜雨
* @since 2021-12-26 10:57 * @since 2021-12-26 10:57
*/ */
@Slf4j
@Service @Service
public class PageService { public class PageService {
@Inject
private RootLayout root;
private SidebarItem prev; private SidebarItem prev;
private final ObjectProperty<SidebarItem> activatedPageProperty; private final ObjectProperty<SidebarItem> activatedPageProperty;
@ -31,13 +23,6 @@ public class PageService {
activatedPageProperty = new SimpleObjectProperty<>(); activatedPageProperty = new SimpleObjectProperty<>();
activatedPageProperty.addListener((obs, prev, now) -> { activatedPageProperty.addListener((obs, prev, now) -> {
this.prev = prev; this.prev = prev;
if (now != null && now.getIOCPage() instanceof AbstractPane pane) {
pane.show();
root.setCenter(pane);
}
if (prev != null && prev.getIOCPage() instanceof AbstractPane pane) {
pane.hide();
}
}); });
} }

View File

@ -4,7 +4,8 @@ import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.fx.ui.components.TrayFX; import com.imyeyu.fx.ui.components.TrayFX;
import com.imyeyu.fx.ui.examples.TimiFXExamples; import com.imyeyu.fx.ui.examples.TimiFXExamples;
import com.imyeyu.fx.ui.examples.bean.Config; import com.imyeyu.fx.ui.examples.bean.Config;
import com.imyeyu.inject.annotation.IOCReturn; import com.imyeyu.inject.annotation.Bean;
import com.imyeyu.inject.annotation.Configuration;
import javafx.scene.image.Image; import javafx.scene.image.Image;
/** /**
@ -13,19 +14,19 @@ import javafx.scene.image.Image;
* @author 夜雨 * @author 夜雨
* @since 2022-08-26 15:23 * @since 2022-08-26 15:23
*/ */
@com.imyeyu.inject.annotation.Resources @Configuration
public class Resources implements TimiFXUI { public class Resources implements TimiFXUI {
public static final Image ICON_X64 = new Image(RESOURCE + "icon.png", 64, 64, true, false); public static final Image ICON_X64 = new Image(RESOURCE + "icon.png", 64, 64, true, false);
/** @return 配置 */ /** @return 配置 */
@IOCReturn @Bean
public Config config() { public Config config() {
return TimiFXExamples.getConfig(); return TimiFXExamples.getConfig();
} }
/** @return 托盘 */ /** @return 托盘 */
@IOCReturn @Bean
public TrayFX trayFX() { public TrayFX trayFX() {
return TrayFX.getInstance(); return TrayFX.getInstance();
} }

View File

@ -13,7 +13,6 @@ import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.fx.ui.examples.ctrl.Main; import com.imyeyu.fx.ui.examples.ctrl.Main;
import com.imyeyu.fx.utils.AnimationRenderer; import com.imyeyu.fx.utils.AnimationRenderer;
import com.imyeyu.fx.utils.Column; import com.imyeyu.fx.utils.Column;
import com.imyeyu.inject.TimiInject;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.io.IO; import com.imyeyu.io.IO;
import com.imyeyu.utils.OS; import com.imyeyu.utils.OS;
@ -154,7 +153,7 @@ fps.valueProperty().addListener((obs, o, newFps) -> {
String jar = IO.getJarAbsolutePath(getClass()); String jar = IO.getJarAbsolutePath(getClass());
// 重启 // 重启
try { try {
TimiFX.doRestart(TimiFXExamples.getInjectApp().injector().di(Main.class), jre + param + jar); TimiFX.doRestart(TimiFXExamples.getInject().getBean(Main.class), jre + param + jar);
} catch (Exception ex) { } catch (Exception ex) {
AlertTips.error(getScene().getWindow(), TimiFXUI.MULTILINGUAL.text("tips.restart.error")); AlertTips.error(getScene().getWindow(), TimiFXUI.MULTILINGUAL.text("tips.restart.error"));
} }

View File

@ -9,8 +9,7 @@ import com.imyeyu.fx.ui.examples.bean.Config;
import com.imyeyu.fx.ui.examples.component.AbstractDemoPane; import com.imyeyu.fx.ui.examples.component.AbstractDemoPane;
import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem; import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.PostConstruct;
import com.imyeyu.inject.annotation.InvokeForInjected;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.control.Label; import javafx.scene.control.Label;
@ -27,12 +26,11 @@ import javafx.scene.layout.VBox;
@Component @Component
public class BindingsConfigDemo extends AbstractDemoPane { public class BindingsConfigDemo extends AbstractDemoPane {
@Inject private final Config config;
private Config config;
private final Label stageSize, interpolatorDuration; private final Label stageSize, interpolatorDuration;
public BindingsConfigDemo() { public BindingsConfigDemo(Config config) {
this.config = config;
title.setText(SidebarItem.BINDING_CONFIG.getText()); title.setText(SidebarItem.BINDING_CONFIG.getText());
document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/config/BindingsConfig.html"); document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/config/BindingsConfig.html");
source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/config/BindingsConfig.java"); source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/config/BindingsConfig.java");
@ -95,8 +93,8 @@ BindingsConfig.cfg(config).bindDoubleProperty(duration, Config.section("Interpol
}}); }});
} }
@InvokeForInjected @PostConstruct
private void config() { private void init() {
stageSize.textProperty().bind(Bindings.createStringBinding(() -> "[%s, %s]".formatted(config.getWidth().get(), config.getHeight().get()), config.getWidth(), config.getHeight())); stageSize.textProperty().bind(Bindings.createStringBinding(() -> "[%s, %s]".formatted(config.getWidth().get(), config.getHeight().get()), config.getWidth(), config.getHeight()));
interpolatorDuration.textProperty().bind(config.getInterpolator().getDuration().asString()); interpolatorDuration.textProperty().bind(config.getInterpolator().getDuration().asString());
} }

View File

@ -13,14 +13,11 @@ import com.imyeyu.fx.ui.examples.component.TimiVersionLabel;
import com.imyeyu.fx.ui.examples.ctrl.Main; import com.imyeyu.fx.ui.examples.ctrl.Main;
import com.imyeyu.fx.ui.examples.util.Resources; import com.imyeyu.fx.ui.examples.util.Resources;
import com.imyeyu.fx.utils.Column; import com.imyeyu.fx.utils.Column;
import com.imyeyu.inject.TimiInject;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.PostConstruct;
import com.imyeyu.inject.annotation.InvokeForInjected;
import com.imyeyu.io.IO; import com.imyeyu.io.IO;
import com.imyeyu.java.bean.Language; import com.imyeyu.java.bean.Language;
import com.imyeyu.utils.OS; import com.imyeyu.utils.OS;
import com.imyeyu.utils.Time;
import javafx.geometry.HPos; import javafx.geometry.HPos;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
@ -31,11 +28,8 @@ import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.text.TextAlignment; import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
import javafx.util.StringConverter; import javafx.util.StringConverter;
import java.util.Date;
/** /**
* 欢迎页 * 欢迎页
* *
@ -45,15 +39,11 @@ import java.util.Date;
@Component @Component
public class Welcome extends AbstractPane implements OS.FileSystem { public class Welcome extends AbstractPane implements OS.FileSystem {
@Inject private final Config config;
private Config config; private final ComboBox<Language.Enum> language;
@Inject public Welcome(Config config) {
private Stage stage; this.config = config;
private final ComboBox<Language> language;
public Welcome() {
Label title = new Label(TimiFXUI.MULTILINGUAL.text("fx.example.title"), new ImageView(Resources.ICON_X64)); Label title = new Label(TimiFXUI.MULTILINGUAL.text("fx.example.title"), new ImageView(Resources.ICON_X64));
title.setMaxWidth(Double.MAX_VALUE); title.setMaxWidth(Double.MAX_VALUE);
title.setAlignment(Pos.CENTER); title.setAlignment(Pos.CENTER);
@ -76,16 +66,16 @@ public class Welcome extends AbstractPane implements OS.FileSystem {
labelLang.setTextFill(Colorful.GRAY); labelLang.setTextFill(Colorful.GRAY);
language = new ComboBox<>(); language = new ComboBox<>();
language.getItems().addAll(Language.values()); language.getItems().addAll(Language.Enum.values());
language.setConverter(new StringConverter<>() { language.setConverter(new StringConverter<>() {
@Override @Override
public String toString(Language language) { public String toString(Language.Enum language) {
return language.getName(); return language.toString();
} }
@Override @Override
public Language fromString(String string) { public Language.Enum fromString(String string) {
return null; return null;
} }
}); });
@ -95,13 +85,13 @@ public class Welcome extends AbstractPane implements OS.FileSystem {
license.setTextAlignment(TextAlignment.CENTER); license.setTextAlignment(TextAlignment.CENTER);
// 开发者 // 开发者
Label develop = new Label(TimiFXUI.MULTILINGUAL.textArgs("developer.arg", "夜雨")); Label develop = new Label(TimiFXUI.MULTILINGUAL.text("developer.arg"));
develop.setAlignment(Pos.CENTER); develop.setAlignment(Pos.CENTER);
TextFlower blog = new TextFlower().matcher(TimiFXUI.MULTILINGUAL.text("blog")); TextFlower blog = new TextFlower().matcher(TimiFXUI.MULTILINGUAL.text("blog"));
blog.setTextAlignment(TextAlignment.CENTER); blog.setTextAlignment(TextAlignment.CENTER);
Label copyright = new Label(TimiFXUI.MULTILINGUAL.textArgs("copyright", "夜雨", Time.yearFull.format(new Date()))); Label copyright = new Label(TimiFXUI.MULTILINGUAL.text("copyright"));
copyright.setAlignment(Pos.CENTER); copyright.setAlignment(Pos.CENTER);
Label versionTimiFX = new Label(TimiFXUI.MULTILINGUAL.textArgs("fx.example.welcome.version.timifx", "0.0.1")); Label versionTimiFX = new Label(TimiFXUI.MULTILINGUAL.text("fx.example.welcome.version.timifx"));
TimiVersionLabel version = new TimiVersionLabel(TimiFXExamples.VERSION, TimiFXExamples.class.getSimpleName()) {{ TimiVersionLabel version = new TimiVersionLabel(TimiFXExamples.VERSION, TimiFXExamples.class.getSimpleName()) {{
version.setGraphic(new Label(TimiFXUI.MULTILINGUAL.text("fx.example.welcome.version"))); version.setGraphic(new Label(TimiFXUI.MULTILINGUAL.text("fx.example.welcome.version")));
}}; }};
@ -145,8 +135,8 @@ public class Welcome extends AbstractPane implements OS.FileSystem {
}}); }});
} }
@InvokeForInjected @PostConstruct
private void injected() { private void init() {
language.valueProperty().bind(config.getLanguage()); language.valueProperty().bind(config.getLanguage());
// 修改语言 // 修改语言
@ -163,7 +153,7 @@ public class Welcome extends AbstractPane implements OS.FileSystem {
String jar = IO.getJarAbsolutePath(getClass()); String jar = IO.getJarAbsolutePath(getClass());
// 重启 // 重启
try { try {
TimiFX.doRestart(TimiFXExamples.getInjectApp().injector().di(Main.class), jre + param + jar); TimiFX.doRestart(TimiFXExamples.getInject().getBean(Main.class), jre + param + jar);
} catch (Exception ex) { } catch (Exception ex) {
AlertTips.error(this, TimiFXUI.MULTILINGUAL.text("tips.restart.error")); AlertTips.error(this, TimiFXUI.MULTILINGUAL.text("tips.restart.error"));
} }

View File

@ -8,8 +8,7 @@ import com.imyeyu.fx.ui.examples.component.animation.InterpolatorPane;
import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem; import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.fx.utils.SmoothScroll; import com.imyeyu.fx.utils.SmoothScroll;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.PostConstruct;
import com.imyeyu.inject.annotation.InvokeForInjected;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
@ -32,12 +31,11 @@ import javafx.util.StringConverter;
@Component @Component
public class InterpolatorDemo extends AbstractDemoPane { public class InterpolatorDemo extends AbstractDemoPane {
@Inject private final Config config;
private Config config;
private final Slider duration; private final Slider duration;
public InterpolatorDemo() { public InterpolatorDemo(Config config) {
this.config = config;
title.setText(SidebarItem.INTERPOLATOR.getText()); title.setText(SidebarItem.INTERPOLATOR.getText());
document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/bean/Interpolators.html"); document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/bean/Interpolators.html");
source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/bean/Interpolators.java"); source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/bean/Interpolators.java");
@ -125,8 +123,8 @@ public class InterpolatorDemo extends AbstractDemoPane {
}); });
} }
@InvokeForInjected @PostConstruct
private void config() { private void init() {
duration.valueProperty().bindBidirectional(config.getInterpolator().getDuration()); duration.valueProperty().bindBidirectional(config.getInterpolator().getDuration());
} }
} }

View File

@ -1,5 +1,6 @@
package com.imyeyu.fx.ui.examples.view.pages.animation; package com.imyeyu.fx.ui.examples.view.pages.animation;
import com.imyeyu.fx.TimiFX;
import com.imyeyu.fx.task.RunAsyncScheduled; import com.imyeyu.fx.task.RunAsyncScheduled;
import com.imyeyu.fx.ui.TimiFXUI; import com.imyeyu.fx.ui.TimiFXUI;
import com.imyeyu.fx.ui.examples.component.AbstractDemoPane; import com.imyeyu.fx.ui.examples.component.AbstractDemoPane;
@ -21,6 +22,7 @@ import javafx.scene.control.ScrollPane;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;

View File

@ -82,7 +82,7 @@ public class EditableTableCellDemo extends AbstractDemoPane {
* 数据对象 * 数据对象
* *
* @author 夜雨 * @author 夜雨
* @since 2022-08-29 21:10 * @since 2022-08-29 21:10
*/ */
public static class Item { public static class Item {

View File

@ -10,8 +10,8 @@ import com.imyeyu.fx.ui.examples.component.AbstractDemoPane;
import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem; import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem;
import com.imyeyu.fx.ui.examples.ctrl.Main; import com.imyeyu.fx.ui.examples.ctrl.Main;
import com.imyeyu.inject.annotation.Component; import com.imyeyu.inject.annotation.Component;
import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.PostConstruct;
import com.imyeyu.inject.annotation.InvokeForInjected; import javafx.stage.Stage;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.VPos; import javafx.geometry.VPos;
import javafx.scene.control.Button; import javafx.scene.control.Button;
@ -30,18 +30,17 @@ import java.awt.TrayIcon;
* @author 夜雨 * @author 夜雨
* @since 2022-09-01 14:39 * @since 2022-09-01 14:39
*/ */
@Component
public class TrayFXDemo extends AbstractDemoPane { public class TrayFXDemo extends AbstractDemoPane {
@Inject private final Main main;
private Main main; private final Stage stage;
private final TrayFX trayFX;
@Inject
private TrayFX trayFX;
private final Button show, hide; private final Button show, hide;
public TrayFXDemo() { public TrayFXDemo(Main main, Stage stage, TrayFX trayFX) {
this.main = main;
this.stage = stage;
this.trayFX = trayFX;
title.setText(SidebarItem.TRAY.getText()); title.setText(SidebarItem.TRAY.getText());
document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/util/TrayFX.html"); document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/util/TrayFX.html");
source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/util/TrayFX.java"); source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/util/TrayFX.java");
@ -103,7 +102,7 @@ public class TrayFXDemo extends AbstractDemoPane {
}); });
} }
@InvokeForInjected @PostConstruct
public void init() { public void init() {
show.disableProperty().bind(trayFX.showingProperty()); show.disableProperty().bind(trayFX.showingProperty());
hide.disableProperty().bind(trayFX.showingProperty().not()); hide.disableProperty().bind(trayFX.showingProperty().not());
@ -111,7 +110,7 @@ public class TrayFXDemo extends AbstractDemoPane {
MenuItem show = new MenuItem(TimiFXUI.MULTILINGUAL.text("show")); MenuItem show = new MenuItem(TimiFXUI.MULTILINGUAL.text("show"));
MenuItem exit = new MenuItem(TimiFXUI.MULTILINGUAL.text("exit"), TimiFXIcon.fromName("FAIL", Colorful.RED)); MenuItem exit = new MenuItem(TimiFXUI.MULTILINGUAL.text("exit"), TimiFXIcon.fromName("FAIL", Colorful.RED));
show.setOnAction(e -> TimiFX.requestTop(main.getStage())); show.setOnAction(e -> TimiFX.requestTop(stage));
exit.setOnAction(e -> main.stop()); exit.setOnAction(e -> main.stop());
trayFX.addMenu(0, show, TimiFXUI.sep(), exit); trayFX.addMenu(0, show, TimiFXUI.sep(), exit);