├── src
└── main
│ ├── resources
│ ├── club
│ │ └── xiaojiawei
│ │ │ ├── test
│ │ │ ├── ColorTest.css
│ │ │ ├── application.properties
│ │ │ ├── application_us.properties
│ │ │ ├── AdaptationTest.css
│ │ │ ├── ColorTest.fxml
│ │ │ ├── PropertiesTest.fxml
│ │ │ └── FxmlTest.fxml
│ │ │ ├── controls
│ │ │ ├── css
│ │ │ │ ├── progressModal.css
│ │ │ │ ├── common
│ │ │ │ │ ├── hyperlink.css
│ │ │ │ │ ├── title.css
│ │ │ │ │ ├── date-time-common.css
│ │ │ │ │ ├── toggle-button.css
│ │ │ │ │ ├── menu-item.css
│ │ │ │ │ ├── menu.css
│ │ │ │ │ ├── text-area.css
│ │ │ │ │ ├── progress.css
│ │ │ │ │ ├── javafx-ui.css
│ │ │ │ │ ├── context-menu.css
│ │ │ │ │ ├── text-filed.css
│ │ │ │ │ ├── tree-view.css
│ │ │ │ │ ├── menu-bar.css
│ │ │ │ │ └── list-view.css
│ │ │ │ ├── windowBar.css
│ │ │ │ ├── switch.css
│ │ │ │ ├── messageBox.css
│ │ │ │ ├── fileUploader.css
│ │ │ │ ├── tableFilterManager.css
│ │ │ │ ├── carousel.css
│ │ │ │ ├── dateSelector.css
│ │ │ │ ├── timeSelector.css
│ │ │ │ └── date.css
│ │ │ ├── images
│ │ │ │ ├── StopIco.svg
│ │ │ │ ├── NextIco.svg
│ │ │ │ ├── StartIco.svg
│ │ │ │ ├── PinnedIco.svg
│ │ │ │ ├── PauseIco.svg
│ │ │ │ ├── PlaybackIco.svg
│ │ │ │ ├── DateIco.svg
│ │ │ │ ├── PersonIco.svg
│ │ │ │ ├── TimeIco.svg
│ │ │ │ ├── DesktopIco.svg
│ │ │ │ ├── DirIco.svg
│ │ │ │ ├── InvisibleIco.svg
│ │ │ │ ├── FilterIco.svg
│ │ │ │ ├── FloatIco.svg
│ │ │ │ ├── CloseIco.svg
│ │ │ │ ├── FlashOnIco.svg
│ │ │ │ ├── LockIco.svg
│ │ │ │ ├── NextPageIco.svg
│ │ │ │ ├── FlushIco.svg
│ │ │ │ ├── HomeIco.svg
│ │ │ │ ├── UpdateIco.svg
│ │ │ │ ├── TrendIco.svg
│ │ │ │ ├── MoveUpIco.svg
│ │ │ │ ├── MoveDownIco.svg
│ │ │ │ ├── PinterIco.svg
│ │ │ │ ├── GiteeIco.svg
│ │ │ │ ├── LinkDirIco.svg
│ │ │ │ ├── WarnIco.svg
│ │ │ │ ├── FlashOffIco.svg
│ │ │ │ ├── EditIco.svg
│ │ │ │ ├── SaveIco.svg
│ │ │ │ ├── FailIco.svg
│ │ │ │ ├── VideoIco.svg
│ │ │ │ ├── NewDirIco.svg
│ │ │ │ ├── ImportIco.svg
│ │ │ │ ├── UnknowFileIco.svg
│ │ │ │ ├── VisibleIco.svg
│ │ │ │ ├── ExportIco.svg
│ │ │ │ ├── RecordingIco.svg
│ │ │ │ ├── GithubIco.svg
│ │ │ │ ├── LungIco.svg
│ │ │ │ ├── UploadIco.svg
│ │ │ │ ├── MessageIco.svg
│ │ │ │ ├── TransmissionIco.svg
│ │ │ │ ├── EventIco.svg
│ │ │ │ ├── FoldUpIco.svg
│ │ │ │ ├── OKIco.svg
│ │ │ │ ├── AutoMeasureIco.svg
│ │ │ │ ├── ShrinkIco.svg
│ │ │ │ ├── EnlargeIco.svg
│ │ │ │ ├── BrokenLineIco.svg
│ │ │ │ ├── RulerIco.svg
│ │ │ │ ├── ScreenshotIco.svg
│ │ │ │ └── LampIco.svg
│ │ │ ├── FileUploader.fxml
│ │ │ ├── Carousel.fxml
│ │ │ ├── DateSelector.fxml
│ │ │ ├── TableFilterManager.fxml
│ │ │ ├── TimeSelector.fxml
│ │ │ ├── MessageBox.fxml
│ │ │ ├── Switch.fxml
│ │ │ ├── DateTime.fxml
│ │ │ ├── Notification.fxml
│ │ │ ├── Date.fxml
│ │ │ ├── Time.fxml
│ │ │ └── WindowBar.fxml
│ │ │ ├── demo
│ │ │ ├── demo.png
│ │ │ └── tab
│ │ │ │ ├── images
│ │ │ │ ├── carousel2.jpg
│ │ │ │ ├── carousel4.jpg
│ │ │ │ ├── carousel6.jpg
│ │ │ │ └── carousel7.jpg
│ │ │ │ ├── controls
│ │ │ │ ├── CalendarTab.fxml
│ │ │ │ ├── DateSelectorTab.fxml
│ │ │ │ ├── TitleTab.fxml
│ │ │ │ ├── WindowBarTab.fxml
│ │ │ │ ├── TimeSelectorTab.fxml
│ │ │ │ ├── ModalTab.fxml
│ │ │ │ ├── CopyLabelTab.fxml
│ │ │ │ ├── IconsTab.fxml
│ │ │ │ └── DateTab.fxml
│ │ │ │ └── style
│ │ │ │ ├── AccordionTab.fxml
│ │ │ │ ├── TextAreaTab.fxml
│ │ │ │ ├── ToggleButtonTab.fxml
│ │ │ │ ├── TextFieldTab.fxml
│ │ │ │ └── ContextMenuTab.fxml
│ │ │ └── component
│ │ │ ├── css
│ │ │ ├── tableDateFilter.css
│ │ │ ├── tableValueFilter.css
│ │ │ └── fileUploaderItem.css
│ │ │ └── FileUploaderItem.fxml
│ ├── META-INF
│ │ └── services
│ │ │ └── club.xiaojiawei.controls.AbstractTableFilterManager
│ └── log4j.properties
│ └── java
│ └── club
│ └── xiaojiawei
│ ├── bean
│ ├── package.html
│ ├── LogRunnable.java
│ └── FileChooserFilter.java
│ ├── config
│ ├── package.html
│ └── JavaFXUIThreadPoolConfig.java
│ ├── enums
│ ├── package.html
│ ├── SizeEnum.java
│ ├── NotificationPosEnum.java
│ ├── StylesheetEnum.java
│ └── NotificationTypeEnum.java
│ ├── factory
│ └── package.html
│ ├── skin
│ ├── package.html
│ ├── VisibleTreeViewSkin.java
│ └── NumberFieldSkin.java
│ ├── test
│ ├── package.html
│ ├── MySwitch.java
│ ├── MyCollections.java
│ ├── FXArrayList.java
│ ├── ImportIcoTest.java
│ ├── LabelUITest.java
│ ├── FxmlTest.java
│ ├── Test.java
│ ├── PasswordShowFieldTest.java
│ ├── FilterFieldTest.java
│ ├── CalendarTest.java
│ ├── DateSelectorTest.java
│ ├── InputTest.java
│ └── TranslateTest.java
│ ├── utils
│ └── package.html
│ ├── annotations
│ ├── package.html
│ ├── OnlyOnce.java
│ ├── NotNull.java
│ ├── Nullable.java
│ └── ValidSizeRange.java
│ ├── component
│ ├── package.html
│ ├── TableCheckFilter.java
│ └── IconTextField.java
│ ├── controls
│ ├── ico
│ │ ├── package.html
│ │ ├── AddIco.java
│ │ ├── CutIco.java
│ │ ├── DirIco.java
│ │ ├── NetIco.java
│ │ ├── RulerIco.java
│ │ ├── CopyIco.java
│ │ ├── EditIco.java
│ │ ├── GiteeIco.java
│ │ ├── HomeIco.java
│ │ ├── LockIco.java
│ │ ├── LungIco.java
│ │ ├── MoveUpIco.java
│ │ ├── NextIco.java
│ │ ├── SaveIco.java
│ │ ├── EnlargeIco.java
│ │ ├── ExportIco.java
│ │ ├── FilterIco.java
│ │ ├── FloatIco.java
│ │ ├── GithubIco.java
│ │ ├── ImportIco.java
│ │ ├── MeasureIco.java
│ │ ├── NewDirIco.java
│ │ ├── ShrinkIco.java
│ │ ├── UploadIco.java
│ │ ├── VideoIco.java
│ │ ├── DesktopIco.java
│ │ ├── LinkDirIco.java
│ │ ├── LoadingIco.java
│ │ ├── PreviewIco.java
│ │ ├── MoveDownIco.java
│ │ ├── AutoMeasureIco.java
│ │ ├── BrokenLineIco.java
│ │ ├── UnknowFileIco.java
│ │ ├── TransmissionIco.java
│ │ ├── OKIco.java
│ │ ├── ClearIco.java
│ │ ├── DateIco.java
│ │ ├── ExitIco.java
│ │ ├── FailIco.java
│ │ ├── FileIco.java
│ │ ├── HelpIco.java
│ │ ├── LampIco.java
│ │ ├── StopIco.java
│ │ ├── TimeIco.java
│ │ ├── WarnIco.java
│ │ ├── CloseIco.java
│ │ ├── EventIco.java
│ │ ├── FlushIco.java
│ │ ├── PauseIco.java
│ │ ├── TrendIco.java
│ │ ├── BrainIco.java
│ │ ├── FoldUpIco.java
│ │ ├── OnlineIco.java
│ │ ├── PersonIco.java
│ │ ├── PinnedIco.java
│ │ ├── RecordIco.java
│ │ ├── UpdateIco.java
│ │ ├── FlashOnIco.java
│ │ ├── MessageIco.java
│ │ ├── OfflineIco.java
│ │ ├── PinterIco.java
│ │ ├── SettingsIco.java
│ │ ├── VisibleIco.java
│ │ ├── AddPersonIco.java
│ │ ├── FlashOffIco.java
│ │ ├── InvisibleIco.java
│ │ ├── NextPageIco.java
│ │ ├── PlaybackIco.java
│ │ ├── RecordingIco.java
│ │ ├── ResistanceIco.java
│ │ ├── ScreenshotIco.java
│ │ ├── HyperventilationIco.java
│ │ └── StartIco.java
│ ├── package.html
│ ├── images
│ │ └── ImagesLoader.java
│ ├── Title.java
│ ├── VisibleTreeView.java
│ ├── TableValueFilterManager.java
│ ├── TableCheckFilterManager.java
│ ├── FilterComboBox.java
│ └── PasswordTextField.java
│ ├── func
│ ├── package.html
│ ├── MarkLogging.java
│ ├── FilterAction.java
│ ├── BaseTransition.java
│ └── DateTimeInterceptor.java
│ └── demo
│ ├── tab
│ ├── style
│ │ ├── package.html
│ │ └── ContextMenuController.java
│ └── controls
│ │ ├── package.html
│ │ ├── NumberFieldController.java
│ │ ├── ModalController.java
│ │ └── CarouselController.java
│ ├── component
│ └── package.html
│ └── package.html
├── .mvn
└── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── .gitignore
├── README.md
└── .github
└── workflows
└── build.yml
/src/main/resources/club/xiaojiawei/test/ColorTest.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/progressModal.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/test/application.properties:
--------------------------------------------------------------------------------
1 | version=版本
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/test/application_us.properties:
--------------------------------------------------------------------------------
1 | version=version
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/bean/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | bean包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/config/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 配置包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/enums/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 枚举包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/factory/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 工厂包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/skin/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 皮肤包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 测试包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/utils/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 工具包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/test/AdaptationTest.css:
--------------------------------------------------------------------------------
1 | .btn-ui{
2 | /*-fx-min-width: 70;*/
3 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/annotations/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 注解包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/component/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 内部组件包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 图标包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 外部组件包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/func/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 自定义函数式接口包
4 |
5 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xjw580/javafx-ui/HEAD/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/tab/style/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | demo组件包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/component/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | demo样式控制器包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 展示包-可以看到所有组件和样式的Demo
4 |
5 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/tab/controls/package.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | demo控件控制器包
4 |
5 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xjw580/javafx-ui/HEAD/src/main/resources/club/xiaojiawei/demo/demo.png
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/hyperlink.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .hyperlink {
4 | -fx-accent: main-color;
5 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/windowBar.css:
--------------------------------------------------------------------------------
1 | .close-ico:hover *{
2 | -fx-fill: red;
3 | }
4 | .pinned-ico:hover *{
5 | -fx-fill: black;
6 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/images/carousel2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xjw580/javafx-ui/HEAD/src/main/resources/club/xiaojiawei/demo/tab/images/carousel2.jpg
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/images/carousel4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xjw580/javafx-ui/HEAD/src/main/resources/club/xiaojiawei/demo/tab/images/carousel4.jpg
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/images/carousel6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xjw580/javafx-ui/HEAD/src/main/resources/club/xiaojiawei/demo/tab/images/carousel6.jpg
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/images/carousel7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xjw580/javafx-ui/HEAD/src/main/resources/club/xiaojiawei/demo/tab/images/carousel7.jpg
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/switch.css:
--------------------------------------------------------------------------------
1 | #bgRectangle{
2 | -fx-fill: #E6E6E6;
3 | }
4 | #switchRectangle{
5 | -fx-fill: main-color;
6 | }
7 | #switchCircle{
8 | -fx-fill: white;
9 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/func/MarkLogging.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.func;
2 |
3 | /**
4 | * @author 肖嘉威 xjw580@qq.com
5 | * @date 2024/7/29 15:22
6 | */
7 | public interface MarkLogging {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/messageBox.css:
--------------------------------------------------------------------------------
1 | #msg{
2 | -fx-background-color: normal-color;
3 | -fx-padding: 8;
4 | -fx-background-radius: 6
5 | }
6 | #triangle{
7 | -fx-fill: normal-color
8 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/images/ImagesLoader.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.images;
2 |
3 | /**
4 | * @author 肖嘉威 xjw580@qq.com
5 | * @date 2023/10/31 0:21
6 | */
7 | public class ImagesLoader {
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/resources/META-INF/services/club.xiaojiawei.controls.AbstractTableFilterManager:
--------------------------------------------------------------------------------
1 | club.xiaojiawei.controls.TableValueFilterManager
2 | club.xiaojiawei.controls.TableDateFilterManager
3 | club.xiaojiawei.controls.TableCheckFilterManager
--------------------------------------------------------------------------------
/src/main/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | log4j.rootLogger=WARN, stdout
2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender
3 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
4 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/MySwitch.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.controls.Switch;
4 |
5 | /**
6 | * @author 肖嘉威
7 | * @date 2025/3/30 22:23
8 | */
9 | public class MySwitch extends Switch {
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/func/FilterAction.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.func;
2 |
3 | /**
4 | * @author 肖嘉威 xjw580@qq.com
5 | * @date 2024/2/22 16:17
6 | */
7 | public interface FilterAction{
8 |
9 | void handle(String text);
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/component/css/tableDateFilter.css:
--------------------------------------------------------------------------------
1 | .table-date-filter-root-pane{
2 | -fx-alignment: CENTER;
3 | -fx-pref-width: 275;
4 | }
5 | .contentHBox{
6 | -fx-spacing: 5;
7 | }
8 | .timeFlowPane{
9 | -fx-padding: 10;
10 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/title.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 | .title-ui{
3 | -fx-background-color: #e8f0fe;
4 | -fx-padding: 13 50 13 13;
5 | -fx-fill: #1c74e8;
6 | -fx-background-radius: 0 19 19 0;
7 | }
8 | .title-ui *{
9 | -fx-fill: #1c74e8;
10 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/enums/SizeEnum.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.enums;
2 |
3 | /**
4 | * @author 肖嘉威 xjw580@qq.com
5 | * @date 2024/1/6 22:22
6 | */
7 | public enum SizeEnum {
8 |
9 | BIG,
10 |
11 | MEDDLE,
12 |
13 | SMALL,
14 |
15 | TINY,
16 |
17 | DEFAULT
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/fileUploader.css:
--------------------------------------------------------------------------------
1 | #FileUploader{
2 | -fx-padding: 15;
3 | -fx-border-radius: 3;
4 | -fx-cursor: hand;
5 | -fx-border-style: dashed;
6 | -fx-background-color: #fbfbfb;
7 | -fx-border-color: grey;
8 | -fx-alignment: CENTER;
9 | -fx-hgap: 15;
10 | -fx-vgap: 15;
11 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/tableFilterManager.css:
--------------------------------------------------------------------------------
1 | .filterBtn{
2 | -fx-padding: 1;
3 | -fx-background-color: transparent;
4 | -fx-border-width: 0;
5 | -fx-cursor: hand;
6 | }
7 | .filterBtn:hover .javafx-ui-ico *{
8 | -fx-fill: black;
9 | }
10 | .filteringBtn .javafx-ui-ico *{
11 | -fx-fill: #56a86b!important;
12 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/annotations/OnlyOnce.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.annotations;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * 该方法只能调用一次或调用多次不生效
7 | * @author 肖嘉威 xjw580@qq.com
8 | * @date 2024/5/11 11:59
9 | */
10 | @Documented
11 | @Retention(RetentionPolicy.CLASS)
12 | @Target({ElementType.METHOD})
13 | public @interface OnlyOnce {
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/enums/NotificationPosEnum.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.enums;
2 |
3 | /**
4 | * @author 肖嘉威 xjw580@qq.com
5 | * @date 2024/1/2 9:10
6 | */
7 | public enum NotificationPosEnum {
8 |
9 | TOP_LEFT,
10 | TOP_RIGHT,
11 | BOTTOM_LEFT,
12 | BOTTOM_RIGHT,
13 | TOP_CENTER,
14 | BOTTOM_CENTER,
15 | CENTER
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/component/css/tableValueFilter.css:
--------------------------------------------------------------------------------
1 | .table-filter-root-pane{
2 | -fx-pref-width: 220;
3 | }
4 | #contentPane{
5 | -fx-spacing: 10;
6 | -fx-padding: 0 2 0 2;
7 | }
8 | .table-view-ui *{
9 | -fx-font-size: 12;
10 | -fx-font-weight: none;
11 | }
12 | .table-view-ui .scroll-bar:horizontal {
13 | -fx-opacity: 0;
14 | -fx-pref-width: 0!important;
15 | -fx-pref-height: 0!important;
16 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/annotations/NotNull.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.annotations;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * 不为空
7 | * @author 肖嘉威 xjw580@qq.com
8 | * @date 2024/5/11 11:59
9 | */
10 | @Documented
11 | @Retention(RetentionPolicy.CLASS)
12 | @Target({ElementType.TYPE_USE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
13 | public @interface NotNull {
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/annotations/Nullable.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.annotations;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * 可能为空
7 | * @author 肖嘉威 xjw580@qq.com
8 | * @date 2024/5/11 11:59
9 | */
10 | @Documented
11 | @Retention(RetentionPolicy.CLASS)
12 | @Target({ElementType.TYPE_USE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
13 | public @interface Nullable {
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/date-time-common.css:
--------------------------------------------------------------------------------
1 | .rightAngleBackground{
2 | -fx-border-radius: 4!important;
3 | -fx-background-radius: 4!important;
4 | }
5 | .time-small-background{
6 | -fx-pref-height: 24!important;
7 | -fx-border-radius: 12;
8 | -fx-background-radius: 12;
9 | }
10 | .time-big-background{
11 | -fx-pref-height: 37!important;
12 | -fx-border-radius: 18;
13 | -fx-background-radius: 18;
14 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/func/BaseTransition.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.func;
2 |
3 | import javafx.animation.Transition;
4 | import javafx.scene.Node;
5 | import javafx.util.Duration;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/23 10:05
10 | */
11 | @FunctionalInterface
12 | public interface BaseTransition {
13 | Transition build(Node node, double from, double to, Duration duration, int cycleCount, boolean autoReverse);
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/toggle-button.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 | .toggle-btn-ui{
3 | -fx-background-insets: 0;
4 | -fx-border-width: 0;
5 | -fx-background-radius: 0;
6 | -fx-background-color: white;
7 | -fx-padding: 10 15 10 15;
8 | }
9 | .toggle-btn-ui:hover{
10 | -fx-background-color: hover-color;
11 | }
12 | .toggle-btn-ui:selected{
13 | -fx-text-fill: white;
14 | -fx-background-color: main-color;
15 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/annotations/ValidSizeRange.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.annotations;
2 |
3 | import club.xiaojiawei.enums.SizeEnum;
4 |
5 | import java.lang.annotation.*;
6 |
7 | /**
8 | * 标定有效尺寸范围
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2024/4/8 20:05
11 | */
12 | @Documented
13 | @Target({ElementType.PARAMETER, ElementType.FIELD})
14 | @Retention(RetentionPolicy.CLASS)
15 | public @interface ValidSizeRange {
16 |
17 | SizeEnum[] value();
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/MyCollections.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * @author 肖嘉威 xjw580@qq.com
7 | * @date 2024/5/28 9:19
8 | */
9 | public class MyCollections {
10 |
11 | public static FXArrayList buildList(E... strings){
12 | return new FXArrayList<>(List.of(strings));
13 | }
14 |
15 | public static FXArrayList buildList(){
16 | return new FXArrayList<>();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/CalendarTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/menu-item.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .menu-item-ui:hover {
4 | -fx-background-color: hover-color;
5 | }
6 |
7 | .menu-item-ui {
8 | -fx-padding: 7 14 7 14;
9 | -fx-background-radius: 5;
10 | }
11 |
12 | /*Size*/
13 |
14 | .menu-item-ui-small {
15 | -fx-padding: 4 8 4 8!important;
16 | -fx-background-radius: 4!important;
17 | }
18 |
19 | .menu-item-ui-big {
20 | -fx-padding: 10 20 10 20!important;
21 | -fx-background-radius: 6!important;
22 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/StopIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/Title.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls;
2 |
3 | import javafx.scene.control.Label;
4 | import javafx.scene.shape.Rectangle;
5 |
6 | /**
7 | * 标题
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/11/23 17:04
10 | */
11 | public class Title extends Label {
12 | public static final String DEFAULT_STYLE_CLASS = "title-ui";
13 | public Title() {
14 | this("");
15 | }
16 |
17 | public Title(String s) {
18 | super(s);
19 | getStyleClass().add(DEFAULT_STYLE_CLASS);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/DateSelectorTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/menu.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .menu-ui .text {
4 | -fx-fill: black;
5 | }
6 |
7 | .menu-ui:hover {
8 | -fx-background-color: normal-hover-color;
9 | }
10 |
11 | .menu-ui {
12 | -fx-padding: 7 14 7 14;
13 | -fx-background-radius: 5;
14 | }
15 |
16 | /*Size*/
17 |
18 | .menu-ui-small {
19 | -fx-padding: 4 8 4 8!important;
20 | -fx-background-radius: 4!important;
21 | }
22 |
23 | .menu-ui-big {
24 | -fx-padding: 10 20 10 20!important;
25 | -fx-background-radius: 6!important;
26 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/test/ColorTest.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/FileUploader.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/bean/LogRunnable.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.bean;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 |
5 | /**
6 | * @author 肖嘉威
7 | * @date 2023/7/8 16:19
8 | */
9 | @Slf4j
10 | public class LogRunnable implements Runnable{
11 |
12 | private final Runnable task;
13 |
14 | public LogRunnable(Runnable task) {
15 | this.task = task;
16 | }
17 |
18 | @Override
19 | public void run() {
20 | try {
21 | task.run();
22 | }catch (Exception e){
23 | log.error("Runnable发生错误" , e);
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/text-area.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 | .text-area-ui{
3 | -fx-effect: default-press-effect;
4 | -fx-background-radius: 3;
5 | -fx-background-color: white;
6 | -fx-border-color: border-color;
7 | -fx-border-insets: 0 1 0 0;
8 | -fx-border-radius: 3;
9 | /*选中文本的颜色*/
10 | -fx-accent: main-color;
11 | }
12 | .text-area-ui:focused{
13 | -fx-border-color: transparent;
14 | -fx-effect: dropshadow(two-pass-box, main-color, 5, 0, 1, 1)!important;
15 | }
16 | .text-area-ui .content {
17 | -fx-background-insets: 0;
18 | -fx-background-color:white;
19 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/NextIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/progress.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 | .progress-bar-ui {
3 | -fx-accent: main-color!important;
4 | }
5 | .progress-bar-ui .bar {
6 | -fx-background-insets: 0;
7 | -fx-background-radius: 0;
8 | }
9 | .progress-bar-ui > .track {
10 | -fx-border-radius: 0;
11 | -fx-background-radius: 0;
12 | -fx-text-box-border: transparent;
13 | -fx-control-inner-background: transparent;
14 | -fx-background-color: transparent;
15 | }
16 | .progress-indicator-ui{
17 | -fx-accent: main-color!important;
18 | }
19 | .progress-indicator-ui .percentage {
20 | -fx-fill:null;
21 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/FXArrayList.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.List;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2024/5/28 9:15
10 | */
11 | public class FXArrayList extends ArrayList {
12 |
13 | public FXArrayList(Collection extends E> c) {
14 | super(c);
15 | }
16 |
17 | public FXArrayList() {
18 | }
19 |
20 | public boolean addAll(E... elements){
21 | return true;
22 | }
23 |
24 | public boolean setAll(E... elements){
25 | return true;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/StartIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/PinnedIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 | !**/src/main/**/target/
4 | !**/src/test/**/target/
5 |
6 | ### IntelliJ IDEA ###
7 | *.iws
8 | *.iml
9 | *.ipr
10 |
11 | ### Eclipse ###
12 | .apt_generated
13 | .classpath
14 | .factorypath
15 | .project
16 | .settings
17 | .springBeans
18 | .sts4-cache
19 |
20 | ### NetBeans ###
21 | /nbproject/private/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
26 | build/
27 | !**/src/main/**/build/
28 | !**/src/test/**/build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
33 | ### Mac OS ###
34 | .DS_Store
35 | /src/test/
36 | /.idea/
37 |
38 |
39 | ### Custom ###
40 | *.exe
41 | /easy-release_static/
42 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/PauseIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/PlaybackIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/TitleTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/DateIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/PersonIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/TimeIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/Carousel.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/carousel.css:
--------------------------------------------------------------------------------
1 | .image{
2 | -fx-background-size: cover ;
3 | }
4 | #left, #right{
5 | visibility: false;
6 | -fx-alignment: CENTER;
7 | -fx-cursor: hand;
8 | -fx-padding: 9 0 9 0;
9 | -fx-pref-width: 30;
10 | -fx-background-radius: 15;
11 | -fx-background-color: rgba(128, 128, 128, 0.5);
12 | }
13 | #rootPane:hover > #left{
14 | visibility: true;
15 | }
16 | #rootPane:hover > #right{
17 | visibility: true;
18 | }
19 | #rootPane{
20 | -fx-pref-height: 265;
21 | }
22 | .dot{
23 | -fx-cursor: hand;
24 | -fx-fill: #e5e5e5;
25 | }
26 | .dot:hover{
27 | -fx-fill: effect-color;
28 | }
29 | .currentDot{
30 | -fx-fill: main-color!important;
31 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/DesktopIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/DirIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/InvisibleIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/VisibleTreeView.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls;
2 |
3 | import club.xiaojiawei.skin.VisibleTreeViewSkin;
4 | import javafx.scene.control.Skin;
5 | import javafx.scene.control.TreeView;
6 |
7 | /**
8 | * @author 肖嘉威
9 | * @date 2024/12/12 10:19
10 | */
11 | public class VisibleTreeView extends TreeView {
12 |
13 | private VisibleTreeViewSkin> visibleTreeViewSkin;
14 |
15 | @Override
16 | protected Skin> createDefaultSkin() {
17 | return visibleTreeViewSkin = new VisibleTreeViewSkin<>(this);
18 | }
19 |
20 | public boolean isIndexVisible(int index) {
21 | return visibleTreeViewSkin != null && visibleTreeViewSkin.isIndexVisible(index);
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/enums/StylesheetEnum.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.enums;
2 |
3 | /**
4 | * @author 肖嘉威 xjw580@qq.com
5 | * @date 2024/3/7 10:59
6 | */
7 | public enum StylesheetEnum {
8 | /**
9 | * 通用样式表,一般不需要自行添加
10 | */
11 | COMMON(),
12 |
13 | ACCORDION(),
14 |
15 | BUTTON(),
16 |
17 | CHECK_BOX(),
18 |
19 | COMBO_BOX(),
20 |
21 | CONTEXT_MENU(),
22 |
23 | JAVAFX_UI(),
24 |
25 | LABEL(),
26 |
27 | PROGRESS(),
28 |
29 | RADIO_BUTTON(),
30 |
31 | SCROLL_BAR(),
32 |
33 | TAB_PANE(),
34 |
35 | TABLE_VIEW(),
36 |
37 | TEXT_AREA(),
38 |
39 | TEXT_FILED(),
40 |
41 | TITLE(),
42 |
43 | TITLED_PANE(),
44 |
45 | TOGGLE_BUTTON(),
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/DateSelector.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/component/css/fileUploaderItem.css:
--------------------------------------------------------------------------------
1 | #fileUploaderItem{
2 | -fx-background-size: cover;
3 | -fx-effect: dropshadow(gaussian, rgba(128, 128, 128, 1), 5, 0, 0, 0);
4 | -fx-background-color: white;
5 | }
6 | #fileUploaderItem #msgOuter{
7 | -fx-spacing: 8;
8 | -fx-padding: 8 0 0 0
9 | }
10 | #fileUploaderItem #closeIcoOuter{
11 | -fx-padding: 3;
12 | -fx-background-color: rgba(255, 255, 255, 0.8);
13 | -fx-background-radius: 9;
14 | -fx-alignment: CENTER;
15 | }
16 | #fileUploaderItem #fileNameLabel, #fileUploaderItem #fileSizeLabel{
17 | -fx-background-color: rgba(255, 255, 255, 0.8);
18 | -fx-effect: default-effect;
19 | -fx-background-radius: 10;
20 | -fx-padding: 1 5 1 5;
21 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FilterIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/WindowBarTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/TableFilterManager.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/javafx-ui.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 | @import "scroll-bar.css";
3 | @import "titled-pane.css";
4 | @import "button.css";
5 | @import "combo-box.css";
6 | @import "progress.css";
7 | @import "check-box.css";
8 | @import "radio-button.css";
9 | @import "tab-pane.css";
10 | @import "accordion.css";
11 | @import "toggle-button.css";
12 | @import "text-filed.css";
13 | @import "text-area.css";
14 | @import "title.css";
15 | @import "table-view.css";
16 | @import "label.css";
17 | @import "context-menu.css";
18 | @import "context-menu.css";
19 | @import "tree-view.css";
20 | @import "pagination.css";
21 | @import "menu-bar.css";
22 | @import "menu-item.css";
23 | @import "menu.css";
24 | @import "hyperlink.css";
25 | @import "list-view.css";
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FloatIco.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/CloseIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FlashOnIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/tab/controls/NumberFieldController.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.demo.tab.controls;
2 |
3 | import club.xiaojiawei.controls.NumberField;
4 | import javafx.fxml.FXML;
5 |
6 | /**
7 | * @author 肖嘉威 xjw580@qq.com
8 | * @date 2024/2/20 11:39
9 | */
10 | public class NumberFieldController {
11 |
12 | @FXML
13 | private NumberField incrementNumberField;
14 |
15 | @FXML
16 | protected void incrementTenNumber(){
17 | incrementNumberField.increment(10, true);
18 | }
19 |
20 | @FXML
21 | protected void incrementHundredNumber(){
22 | incrementNumberField.increment(100, true);
23 | }
24 |
25 | @FXML
26 | protected void incrementThousandNumber(){
27 | incrementNumberField.increment(1000, true);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/test/PropertiesTest.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/AddIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class AddIco extends AbstractIco {
12 |
13 | public AddIco() {
14 | this(null);
15 | }
16 |
17 | public AddIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/CutIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class CutIco extends AbstractIco {
12 |
13 | public CutIco() {
14 | this(null);
15 | }
16 |
17 | public CutIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/DirIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class DirIco extends AbstractIco {
12 |
13 | public DirIco() {
14 | this(null);
15 | }
16 |
17 | public DirIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/NetIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class NetIco extends AbstractIco {
12 |
13 | public NetIco() {
14 | this(null);
15 | }
16 |
17 | public NetIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/RulerIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class RulerIco extends AbstractIco {
12 |
13 | public RulerIco() {
14 | this(null);
15 | }
16 |
17 | public RulerIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/CopyIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class CopyIco extends AbstractIco {
12 |
13 | public CopyIco() {
14 | this(null);
15 | }
16 |
17 | public CopyIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/EditIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class EditIco extends AbstractIco {
12 |
13 | public EditIco() {
14 | this(null);
15 | }
16 |
17 | public EditIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/GiteeIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 0:05
10 | */
11 | public class GiteeIco extends AbstractIco {
12 |
13 | public GiteeIco() {
14 | this(null);
15 | }
16 |
17 | public GiteeIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/HomeIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class HomeIco extends AbstractIco {
12 |
13 | public HomeIco() {
14 | this(null);
15 | }
16 |
17 | public HomeIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/LockIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class LockIco extends AbstractIco {
12 |
13 | public LockIco() {
14 | this(null);
15 | }
16 |
17 | public LockIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/LungIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class LungIco extends AbstractIco {
12 |
13 | public LungIco() {
14 | this(null);
15 | }
16 |
17 | public LungIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/MoveUpIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class MoveUpIco extends AbstractIco {
12 |
13 | public MoveUpIco() {
14 | this(null);
15 | }
16 |
17 | public MoveUpIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/NextIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/11/7 17:32
10 | */
11 | public class NextIco extends AbstractIco {
12 |
13 | public NextIco() {
14 | this("black");
15 | }
16 |
17 | public NextIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/SaveIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class SaveIco extends AbstractIco {
12 |
13 | public SaveIco() {
14 | this(null);
15 | }
16 |
17 | public SaveIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/LockIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/NextPageIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/EnlargeIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class EnlargeIco extends AbstractIco {
12 |
13 | public EnlargeIco() {
14 | this(null);
15 | }
16 |
17 | public EnlargeIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ExportIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/11/5 14:29
10 | */
11 | public class ExportIco extends AbstractIco {
12 |
13 | public ExportIco() {
14 | this(null);
15 | }
16 |
17 | public ExportIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FilterIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class FilterIco extends AbstractIco {
12 |
13 | public FilterIco() {
14 | this(null);
15 | }
16 |
17 | public FilterIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FloatIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class FloatIco extends AbstractIco {
12 |
13 | public FloatIco() {
14 | this(null);
15 | }
16 |
17 | public FloatIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/GithubIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class GithubIco extends AbstractIco {
12 |
13 | public GithubIco() {
14 | this(null);
15 | }
16 |
17 | public GithubIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ImportIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/11/5 14:29
10 | */
11 | public class ImportIco extends AbstractIco {
12 |
13 | public ImportIco() {
14 | this(null);
15 | }
16 |
17 | public ImportIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/MeasureIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class MeasureIco extends AbstractIco {
12 |
13 | public MeasureIco() {
14 | this(null);
15 | }
16 |
17 | public MeasureIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/NewDirIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class NewDirIco extends AbstractIco {
12 |
13 | public NewDirIco() {
14 | this(null);
15 | }
16 |
17 | public NewDirIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ShrinkIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class ShrinkIco extends AbstractIco {
12 |
13 | public ShrinkIco() {
14 | this(null);
15 | }
16 |
17 | public ShrinkIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/UploadIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class UploadIco extends AbstractIco {
12 |
13 | public UploadIco() {
14 | this(null);
15 | }
16 |
17 | public UploadIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/VideoIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class VideoIco extends AbstractIco {
12 |
13 | public VideoIco() {
14 | this(null);
15 | }
16 |
17 | public VideoIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/dateSelector.css:
--------------------------------------------------------------------------------
1 | .label{
2 | -fx-pref-width: 34;
3 | -fx-pref-height: 25;
4 | -fx-alignment: CENTER;
5 | -fx-background-radius: 5;
6 | }
7 | .tile-pane{
8 | -fx-alignment: TOP_CENTER;
9 | }
10 | .label:hover{
11 | -fx-background-color: hover-color;
12 | }
13 | .selectedLabel{
14 | -fx-background-color: main-color!important;
15 | -fx-text-fill: white!important;
16 | }
17 | .dateSelectorScrollPane{
18 | -fx-padding: 0;
19 | -fx-background: white;
20 | -fx-background-color: white;
21 | -fx-border-color: white;
22 | -fx-background-insets: 0;/*防止点击时移动*/
23 | -fx-hbar-policy: never;
24 | -fx-vbar-policy: never;
25 | }
26 | #yearsPane{
27 | -fx-padding: 0 1 0 0;
28 | }
29 | #root{
30 | -fx-background-color: white;
31 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FlushIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/DesktopIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class DesktopIco extends AbstractIco {
12 |
13 | public DesktopIco() {
14 | this(null);
15 | }
16 |
17 | public DesktopIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/LinkDirIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class LinkDirIco extends AbstractIco {
12 |
13 | public LinkDirIco() {
14 | this(null);
15 | }
16 |
17 | public LinkDirIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/LoadingIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class LoadingIco extends AbstractIco {
12 |
13 | public LoadingIco() {
14 | this(null);
15 | }
16 |
17 | public LoadingIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/PreviewIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class PreviewIco extends AbstractIco {
12 |
13 | public PreviewIco() {
14 | this(null);
15 | }
16 |
17 | public PreviewIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/HomeIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/MoveDownIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 0:28
10 | */
11 | public class MoveDownIco extends AbstractIco {
12 |
13 | public MoveDownIco() {
14 | this(null);
15 | }
16 |
17 | public MoveDownIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/tab/controls/ModalController.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.demo.tab.controls;
2 |
3 | import club.xiaojiawei.controls.Modal;
4 | import javafx.event.ActionEvent;
5 | import javafx.fxml.FXML;
6 | import javafx.scene.control.Label;
7 | import javafx.scene.control.ScrollPane;
8 |
9 | /**
10 | * @author 肖嘉威 xjw580@qq.com
11 | * @date 2024/2/2 14:23
12 | */
13 | public class ModalController {
14 |
15 | @FXML
16 | private ScrollPane rootPane;
17 |
18 | @FXML protected void showModal(ActionEvent actionEvent) {
19 | Modal modal = new Modal(rootPane, "卸载360安全卫士", new Label("你确定要不卸载360安全助手吗?"), () -> System.out.println("确认"), () -> {
20 | System.out.println("取消");
21 | });
22 | modal.setMaskClosable(true);
23 | modal.show();
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/AutoMeasureIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class AutoMeasureIco extends AbstractIco {
12 |
13 | public AutoMeasureIco() {
14 | this(null);
15 | }
16 |
17 | public AutoMeasureIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/BrokenLineIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class BrokenLineIco extends AbstractIco {
12 |
13 | public BrokenLineIco() {
14 | this(null);
15 | }
16 |
17 | public BrokenLineIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/UnknowFileIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class UnknowFileIco extends AbstractIco {
12 |
13 | public UnknowFileIco() {
14 | this(null);
15 | }
16 |
17 | public UnknowFileIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/TransmissionIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import org.girod.javafx.svgimage.SVGImage;
5 | import org.girod.javafx.svgimage.SVGLoader;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2023/10/31 22:28
10 | */
11 | public class TransmissionIco extends AbstractIco {
12 |
13 | public TransmissionIco() {
14 | this(null);
15 | }
16 |
17 | public TransmissionIco(String color) {
18 | super(color);
19 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
20 | if (svgImage != null) {
21 | this.setMaxWidth(svgImage.getWidth());
22 | this.getChildren().add(svgImage);
23 | }
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/ImportIcoTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.controls.ico.ImportIco;
4 | import javafx.application.Application;
5 | import javafx.scene.Scene;
6 | import javafx.scene.layout.StackPane;
7 | import javafx.stage.Stage;
8 |
9 | /**
10 | * @author 肖嘉威 xjw580@qq.com
11 | * @date 2024/5/21 16:41
12 | */
13 | public class ImportIcoTest extends Application {
14 |
15 | public static void main(String[] args) {
16 | launch(args);
17 | }
18 |
19 | @Override
20 | public void start(Stage primaryStage) {
21 | ImportIco importIco = new ImportIco();
22 | importIco.setColor("red");
23 | Scene scene = new Scene(new StackPane(importIco), 400, 400);
24 | primaryStage.setScene(scene);
25 | primaryStage.show();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/OKIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:05
11 | */
12 | public class OKIco extends AbstractIco {
13 |
14 | public OKIco() {
15 | this(null);
16 | }
17 |
18 | public OKIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ClearIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class ClearIco extends AbstractIco {
13 |
14 | public ClearIco() {
15 | this(null);
16 | }
17 |
18 | public ClearIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/DateIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:28
11 | */
12 | public class DateIco extends AbstractIco {
13 |
14 | public DateIco() {
15 | this(null);
16 | }
17 |
18 | public DateIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ExitIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class ExitIco extends AbstractIco {
13 |
14 | public ExitIco() {
15 | this(null);
16 | }
17 |
18 | public ExitIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FailIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class FailIco extends AbstractIco {
13 |
14 | public FailIco() {
15 | this(null);
16 | }
17 |
18 | public FailIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FileIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:05
11 | */
12 | public class FileIco extends AbstractIco {
13 |
14 | public FileIco() {
15 | this(null);
16 | }
17 |
18 | public FileIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/HelpIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:28
11 | */
12 | public class HelpIco extends AbstractIco {
13 |
14 | public HelpIco() {
15 | this(null);
16 | }
17 |
18 | public HelpIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/LampIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:28
11 | */
12 | public class LampIco extends AbstractIco {
13 |
14 | public LampIco() {
15 | this(null);
16 | }
17 |
18 | public LampIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/StopIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class StopIco extends AbstractIco {
13 |
14 | public StopIco() {
15 | this(null);
16 | }
17 |
18 | public StopIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/TimeIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:28
11 | */
12 | public class TimeIco extends AbstractIco {
13 |
14 | public TimeIco() {
15 | this(null);
16 | }
17 |
18 | public TimeIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/WarnIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:33
11 | */
12 | public class WarnIco extends AbstractIco {
13 |
14 | public WarnIco() {
15 | this(null);
16 | }
17 |
18 | public WarnIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/func/DateTimeInterceptor.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.func;
2 |
3 | import javafx.beans.property.ObjectProperty;
4 |
5 | import java.util.function.Predicate;
6 |
7 | /**
8 | * 日期拦截器
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2024/3/8 15:12
11 | */
12 | public interface DateTimeInterceptor {
13 |
14 | /**
15 | * 获取日期拦截器
16 | * @return
17 | */
18 | Predicate getInterceptor();
19 |
20 | /**
21 | * 获取日期拦截器属性
22 | * @return
23 | */
24 | ObjectProperty> interceptorProperty();
25 |
26 | /**
27 | * 设置日期拦截器
28 | * @param dateInterceptor
29 | */
30 | void setInterceptor(Predicate dateInterceptor);
31 |
32 | default boolean test(T t){
33 | return getInterceptor() == null || getInterceptor().test(t);
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/UpdateIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/CloseIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:28
11 | */
12 | public class CloseIco extends AbstractIco {
13 |
14 | public CloseIco() {
15 | this(null);
16 | }
17 |
18 | public CloseIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/EventIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/12/5 9:58
11 | */
12 | public class EventIco extends AbstractIco {
13 |
14 | public EventIco() {
15 | this(null);
16 | }
17 |
18 | public EventIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FlushIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/11/5 14:29
11 | */
12 | public class FlushIco extends AbstractIco {
13 |
14 | public FlushIco() {
15 | this(null);
16 | }
17 |
18 | public FlushIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/PauseIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:05
11 | */
12 | public class PauseIco extends AbstractIco {
13 |
14 | public PauseIco() {
15 | this(null);
16 | }
17 |
18 | public PauseIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/TrendIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/12/5 9:57
11 | */
12 | public class TrendIco extends AbstractIco {
13 |
14 | public TrendIco() {
15 | this("black");
16 | }
17 |
18 | public TrendIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/context-menu.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .context-menu-ui .menu-item {
4 | -fx-background-radius: 5;
5 | -fx-padding: 7 14 7 14;
6 | }
7 |
8 | .context-menu-ui-small .menu-item {
9 | -fx-padding: 4 8 4 8!important;
10 | -fx-background-radius: 4!important;
11 | }
12 |
13 | .context-menu-ui-big .menu-item {
14 | -fx-padding: 10 20 10 20!important;
15 | -fx-background-radius: 6!important;
16 | }
17 |
18 | .context-menu-ui .menu-item:focused {
19 | -fx-background-color: #b3d5ff !important;
20 | }
21 |
22 | .context-menu-ui {
23 | -fx-effect: dropshadow(gaussian, rgba(128, 128, 128, 0.67), 15, 0, 3, 3);
24 | -fx-padding: 5 3 5 3;
25 | -fx-background-color: background-color !important;
26 | -fx-border-color: transparent;
27 | -fx-background-radius: 5;
28 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/TrendIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/BrainIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class BrainIco extends AbstractIco {
13 |
14 | public BrainIco() {
15 | this("black");
16 | }
17 |
18 | public BrainIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FoldUpIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class FoldUpIco extends AbstractIco {
13 |
14 | public FoldUpIco() {
15 | this(null);
16 | }
17 |
18 | public FoldUpIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/OnlineIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class OnlineIco extends AbstractIco {
13 |
14 | public OnlineIco() {
15 | this(null);
16 | }
17 |
18 | public OnlineIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/PersonIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class PersonIco extends AbstractIco {
13 |
14 | public PersonIco() {
15 | this(null);
16 | }
17 |
18 | public PersonIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/PinnedIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class PinnedIco extends AbstractIco {
13 |
14 | public PinnedIco() {
15 | this(null);
16 | }
17 |
18 | public PinnedIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/RecordIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class RecordIco extends AbstractIco {
13 |
14 | public RecordIco() {
15 | this(null);
16 | }
17 |
18 | public RecordIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/UpdateIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 14:54
11 | */
12 | public class UpdateIco extends AbstractIco {
13 |
14 | public UpdateIco() {
15 | this(null);
16 | }
17 |
18 | public UpdateIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/TimeSelector.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FlashOnIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class FlashOnIco extends AbstractIco {
13 |
14 | public FlashOnIco() {
15 | this(null);
16 | }
17 |
18 | public FlashOnIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/MessageIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:28
11 | */
12 | public class MessageIco extends AbstractIco {
13 |
14 | public MessageIco() {
15 | this(null);
16 | }
17 |
18 | public MessageIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/OfflineIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class OfflineIco extends AbstractIco {
13 |
14 | public OfflineIco() {
15 | this(null);
16 | }
17 |
18 | public OfflineIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/PinterIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class PinterIco extends AbstractIco {
13 |
14 | public PinterIco() {
15 | this("black");
16 | }
17 |
18 | public PinterIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/SettingsIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:05
11 | */
12 | public class SettingsIco extends AbstractIco {
13 |
14 | public SettingsIco() {
15 | this(null);
16 | }
17 |
18 | public SettingsIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/VisibleIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 14:45
11 | */
12 | public class VisibleIco extends AbstractIco {
13 |
14 | public VisibleIco() {
15 | this(null);
16 | }
17 |
18 | public VisibleIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/AddPersonIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class AddPersonIco extends AbstractIco {
13 |
14 | public AddPersonIco() {
15 | this(null);
16 | }
17 |
18 | public AddPersonIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/FlashOffIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class FlashOffIco extends AbstractIco {
13 |
14 | public FlashOffIco() {
15 | this(null);
16 | }
17 |
18 | public FlashOffIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/InvisibleIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 14:36
11 | */
12 | public class InvisibleIco extends AbstractIco {
13 |
14 | public InvisibleIco() {
15 | this(null);
16 | }
17 |
18 | public InvisibleIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/NextPageIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class NextPageIco extends AbstractIco {
13 |
14 | public NextPageIco() {
15 | this("black");
16 | }
17 |
18 | public NextPageIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/PlaybackIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class PlaybackIco extends AbstractIco {
13 |
14 | public PlaybackIco() {
15 | this(null);
16 | }
17 |
18 | public PlaybackIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/RecordingIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class RecordingIco extends AbstractIco {
13 |
14 | public RecordingIco() {
15 | this(null);
16 | }
17 |
18 | public RecordingIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/text-filed.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .text-field-ui {
4 | -fx-effect: default-press-effect;
5 | -fx-background-insets: 0;
6 | -fx-background-radius: 3;
7 | -fx-background-color: white;
8 | -fx-padding: 7;
9 | -fx-border-color: border-color;
10 | -fx-border-radius: 3;
11 | /*选中文本的颜色*/
12 | -fx-accent: main-color;
13 | }
14 |
15 | .text-field {
16 | -fx-accent: main-color;
17 | }
18 |
19 | .text-field-ui:focused {
20 | -fx-border-color: transparent;
21 | -fx-effect: dropshadow(two-pass-box, main-color, 5, 0, 1, 1) !important;
22 | }
23 |
24 | /*Size*/
25 | .text-field-ui-tiny {
26 | -fx-padding: 0 !important;
27 | }
28 |
29 | .text-field-ui-small {
30 | -fx-padding: 3 !important;
31 | }
32 |
33 | .text-field-ui-big {
34 | -fx-padding: 10 !important;
35 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ResistanceIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class ResistanceIco extends AbstractIco {
13 |
14 | public ResistanceIco() {
15 | this(null);
16 | }
17 |
18 | public ResistanceIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/ScreenshotIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class ScreenshotIco extends AbstractIco {
13 |
14 | public ScreenshotIco() {
15 | this("black");
16 | }
17 |
18 | public ScreenshotIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/tab/controls/CarouselController.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.demo.tab.controls;
2 |
3 | import club.xiaojiawei.controls.Carousel;
4 | import club.xiaojiawei.controls.NumberField;
5 | import javafx.fxml.FXML;
6 | import javafx.fxml.Initializable;
7 |
8 | import java.net.URL;
9 | import java.util.ResourceBundle;
10 |
11 | /**
12 | * @author 肖嘉威 xjw580@qq.com
13 | * @date 2024/2/21 16:06
14 | */
15 | public class CarouselController implements Initializable {
16 |
17 | @FXML
18 | private Carousel carouselDemo;
19 | @FXML
20 | private NumberField nudeScaleField;
21 |
22 | @FXML
23 | protected void changeNudeScale(){
24 | carouselDemo.setNudeScale(Double.parseDouble(nudeScaleField.getText()));
25 | }
26 |
27 | @Override
28 | public void initialize(URL url, ResourceBundle resourceBundle) {
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/MoveUpIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/tree-view.css:
--------------------------------------------------------------------------------
1 | .tree-view-ui{
2 | -fx-border-width: 0;
3 | -fx-background-insets: 0!important;
4 | }
5 | .tree-view-ui:focused .tree-cell:selected {
6 | -fx-background-color: #a7d2ff!important;
7 | }
8 | .tree-view-ui .tree-cell:selected .filter-ico {
9 | -fx-background-color: success-color;
10 | }
11 | .tree-view-ui .tree-cell .file-icon {
12 | -fx-background-color: rgb(230, 234, 241);
13 | }
14 | .tree-view-ui:focused .tree-cell:hover {
15 | -fx-background-color: #f5f8fe;
16 | }
17 | .tree-view-ui .arrow {
18 | -fx-rotate: -90;
19 | -fx-background-color: #353535;
20 | -fx-shape: "M1.87,2.5H8.15a1.06,1.06,0,0,1,.64,1.78L5.71,7.79a.91.91,0,0,1-1.4,0L1.23,4.28A1.06,1.06,0,0,1,1.87,2.5Z";
21 | -fx-scale-shape: false;
22 | }
23 | .tree-view-ui .tree-cell:expanded .arrow{
24 | -fx-rotate: 0!important;
25 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/skin/VisibleTreeViewSkin.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.skin;
2 |
3 | import javafx.scene.control.TreeCell;
4 | import javafx.scene.control.TreeView;
5 | import javafx.scene.control.skin.TreeViewSkin;
6 | import javafx.scene.control.skin.VirtualFlow;
7 |
8 | /**
9 | * @author 肖嘉威
10 | * @date 2024/12/12 10:15
11 | */
12 |
13 | public class VisibleTreeViewSkin extends TreeViewSkin {
14 |
15 | public VisibleTreeViewSkin(TreeView treeView) {
16 | super(treeView);
17 | }
18 |
19 | public boolean isIndexVisible(int index) {
20 | VirtualFlow> flow = getVirtualFlow();
21 | return flow.getFirstVisibleCell() != null &&
22 | flow.getLastVisibleCell() != null &&
23 | flow.getFirstVisibleCell().getIndex() < index &&
24 | flow.getLastVisibleCell().getIndex() > index;
25 | }
26 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/MoveDownIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/PinterIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/HyperventilationIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 22:28
11 | */
12 | public class HyperventilationIco extends AbstractIco {
13 |
14 | public HyperventilationIco() {
15 | this(null);
16 | }
17 |
18 | public HyperventilationIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/TimeSelectorTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/config/JavaFXUIThreadPoolConfig.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.config;
2 |
3 | import java.util.concurrent.*;
4 | import java.util.concurrent.atomic.AtomicInteger;
5 |
6 | /**
7 | * @author 肖嘉威 xjw580@qq.com
8 | * @date 2023/11/7 22:24
9 | */
10 | public class JavaFXUIThreadPoolConfig {
11 |
12 | public static final ScheduledThreadPoolExecutor SCHEDULED_POOL = new ScheduledThreadPoolExecutor(2, new ThreadFactory() {
13 | private final AtomicInteger num = new AtomicInteger(0);
14 | @Override
15 | public Thread newThread(Runnable r) {
16 | return new Thread(r, "JavaFX-UI-POOL Thread-" + num.getAndIncrement());
17 | }
18 | }, new ThreadPoolExecutor.AbortPolicy());
19 |
20 | public static final ExecutorService V_THREAD_POOL = Executors.newThreadPerTaskExecutor(Thread.ofVirtual().name("ExtraPool VThread-", 0).factory());
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/TableValueFilterManager.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls;
2 |
3 | import club.xiaojiawei.component.AbstractTableFilter;
4 | import club.xiaojiawei.component.TableValueFilter;
5 | import javafx.scene.control.TableColumn;
6 |
7 | /**
8 | * 表格值过滤管理器,默认过滤器管理器,T最好是String类型,或者其toString方法返回的字符串和表格中显示的字符串是一样的
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2024/5/10 17:54
11 | */
12 | public class TableValueFilterManager extends AbstractTableFilterManager {
13 |
14 | @Override
15 | protected AbstractTableFilter getTableFilter(TableColumn tableColumn, TableFilterManagerGroup tableFilterManagerGroup) {
16 | return new TableValueFilter<>(tableColumn, tableFilterManagerGroup);
17 | }
18 |
19 | @Override
20 | public boolean canFilter(String userData) {
21 | return userData == null || userData.isBlank();
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/GiteeIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/TableCheckFilterManager.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls;
2 |
3 | import club.xiaojiawei.component.AbstractTableFilter;
4 | import club.xiaojiawei.component.TableCheckFilter;
5 | import javafx.scene.control.TableColumn;
6 |
7 | import java.util.Objects;
8 |
9 | /**
10 | * 表格单选框过滤管理器,T最好是String类型,或者其toString方法返回的字符串和表格中显示的字符串是一样的
11 | * @author 肖嘉威 xjw580@qq.com
12 | * @date 2024/5/11 18:12
13 | */
14 | public class TableCheckFilterManager extends AbstractTableFilterManager {
15 |
16 | @Override
17 | protected AbstractTableFilter getTableFilter(TableColumn tableColumn, TableFilterManagerGroup group) {
18 | return new TableCheckFilter<>(tableColumn, group);
19 | }
20 |
21 | @Override
22 | public boolean canFilter(String userData) {
23 | return userData != null && Objects.equals(userData, "checkBox");
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/MessageBox.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/bean/FileChooserFilter.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.bean;
2 |
3 | import club.xiaojiawei.annotations.NotNull;
4 | import club.xiaojiawei.annotations.Nullable;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.io.File;
10 | import java.util.function.Predicate;
11 |
12 | /**
13 | * @author 肖嘉威
14 | * @date 2024/12/5 14:07
15 | */
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class FileChooserFilter {
20 |
21 | public static final FileChooserFilter FILE_CHOOSER_FILTER = new FileChooserFilter(null, File::isFile);
22 |
23 | public static final FileChooserFilter DIR_CHOOSER_FILTER = new FileChooserFilter(File::isDirectory, File::isDirectory);
24 |
25 | @Nullable
26 | private Predicate<@NotNull File> showFilter;
27 |
28 | @Nullable
29 | private Predicate<@NotNull File> resultFilter;
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/timeSelector.css:
--------------------------------------------------------------------------------
1 | #root{
2 | -fx-padding: 4;
3 | -fx-effect: dropshadow(gaussian, #b3d5ff, 10, 0, 0, 0)!important;
4 | -fx-background-radius: 5;
5 | -fx-background-color: white;
6 | }
7 | .timeSelector{
8 | -fx-padding: 0;
9 | -fx-background-color: transparent;
10 | -fx-border-color: transparent;
11 | -fx-background-insets: 0;/*防止点击时移动*/
12 | -fx-hbar-policy: never;
13 | -fx-vbar-policy: never;
14 | }
15 | .v-box{
16 | -fx-background-color: white;
17 | }
18 | .timeLabel{
19 | -fx-alignment: CENTER;
20 | -fx-pref-width: 38;
21 | -fx-pref-height: 29;
22 | -fx-background-color: white;
23 | -fx-font-size: 15;
24 | -fx-background-radius: 5;
25 | }
26 | .timeLabel:hover{
27 | -fx-background-color: hover-color;
28 | }
29 | .selectedTimeLabel{
30 | -fx-background-color: main-color!important;
31 | -fx-text-fill: white!important;
32 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/Switch.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/LinkDirIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/LabelUITest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.JavaFXUI;
4 | import club.xiaojiawei.controls.Title;
5 | import javafx.application.Application;
6 | import javafx.scene.Group;
7 | import javafx.scene.Scene;
8 | import javafx.stage.Stage;
9 |
10 | /**
11 | * @author 肖嘉威 xjw580@qq.com
12 | * @date 2023/11/23 17:23
13 | */
14 | public class LabelUITest extends Application {
15 |
16 | public static void main(String[] args) {
17 | launch(args);
18 | }
19 |
20 | @Override
21 | public void start(Stage primaryStage) {
22 | Title title = new Title("HELLO");
23 | title.setPrefHeight(40);
24 | title.setPrefWidth(220);
25 | Scene scene = new Scene(new Group(title), 400, 400);
26 | scene.getStylesheets().add(JavaFXUI.javafxUIStylesheet());
27 | primaryStage.setScene(scene);
28 | primaryStage.show();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/WarnIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/ModalTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
14 |
17 |
18 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FlashOffIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/style/AccordionTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/enums/NotificationTypeEnum.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.enums;
2 |
3 | import club.xiaojiawei.controls.ico.FailIco;
4 | import club.xiaojiawei.controls.ico.MessageIco;
5 | import club.xiaojiawei.controls.ico.OKIco;
6 | import club.xiaojiawei.controls.ico.WarnIco;
7 | import javafx.scene.layout.Pane;
8 | import lombok.Getter;
9 |
10 | import java.util.function.Supplier;
11 |
12 | /**
13 | * @author 肖嘉威 xjw580@qq.com
14 | * @date 2024/1/2 9:10
15 | */
16 | @Getter
17 | public enum NotificationTypeEnum {
18 |
19 | SUCCESS(OKIco::new, "#389751"),
20 | INFO(MessageIco::new, "#2281F0"),
21 | WARN(WarnIco::new, "#FF8000"),
22 | ERROR(FailIco::new, "#FF0000"),
23 | ;
24 | private final Supplier builder;
25 |
26 | private final String color;
27 |
28 | NotificationTypeEnum(Supplier builder, String color) {
29 | this.builder = builder;
30 | this.color = color;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/EditIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/SaveIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FailIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/VideoIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/menu-bar.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .menu-bar-ui * {
4 | -fx-accent: normal-hover-color !important;
5 | }
6 |
7 | .menu-bar-ui {
8 | -fx-background-color: linear-gradient(to right, shallow-color, background-color);
9 | /*-fx-border-width: 0 0 1 0;*/
10 | /*-fx-border-color: gray;*/
11 | }
12 |
13 | .menu-bar-ui .menu .text {
14 | -fx-fill: black;
15 | }
16 |
17 | .menu-bar-ui .menu:hover {
18 | -fx-background-color: normal-hover-color;
19 | }
20 |
21 | .menu-bar-ui .context-menu {
22 | -fx-background-radius: 5;
23 | -fx-border-radius: 5;
24 | -fx-padding: 4;
25 | -fx-background-color: white;
26 | -fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.2), 8, 0, 0, 2);
27 | }
28 |
29 | /*Size*/
30 |
31 | .menu-bar-ui .menu .label {
32 | -fx-padding: 3;
33 | }
34 |
35 | .menu-bar-ui-small .menu .label {
36 | -fx-padding: 1;
37 | }
38 |
39 | .menu-bar-ui-big .menu .label {
40 | -fx-padding: 5;
41 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/NewDirIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/ImportIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/UnknowFileIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/VisibleIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/ExportIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/RecordingIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/test/FxmlTest.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/GithubIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/style/TextAreaTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/LungIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/UploadIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/FilterComboBox.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls;
2 |
3 | import club.xiaojiawei.skin.FilterComboBoxListViewSkin;
4 | import javafx.collections.ObservableList;
5 | import javafx.scene.control.ComboBox;
6 | import javafx.scene.control.Skin;
7 | import lombok.Getter;
8 | import lombok.Setter;
9 |
10 | /**
11 | * 带有搜索框的ComboBox
12 | * @author 肖嘉威 xjw580@qq.com
13 | * @date 2024/2/21 9:48
14 | */
15 | @Setter
16 | @Getter
17 | public class FilterComboBox extends ComboBox {
18 |
19 | private boolean ignoreCase;
20 |
21 | public FilterComboBox() {
22 | super();
23 | }
24 |
25 | public FilterComboBox(ObservableList items) {
26 | super(items);
27 | }
28 |
29 | public FilterComboBox(ObservableList items, boolean ignoreCase) {
30 | super(items);
31 | this.ignoreCase = ignoreCase;
32 | }
33 |
34 | @Override
35 | protected Skin> createDefaultSkin() {
36 | return new FilterComboBoxListViewSkin<>(this);
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/PasswordTextField.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls;
2 |
3 | import club.xiaojiawei.skin.PasswordTextFieldSkin;
4 | import javafx.beans.property.BooleanProperty;
5 | import javafx.beans.property.SimpleBooleanProperty;
6 | import javafx.scene.control.*;
7 |
8 | /**
9 | * 密码输入框
10 | * @author 肖嘉威 xjw580@qq.com
11 | * @date 2023/10/31 14:25
12 | */
13 | public class PasswordTextField extends PasswordField {
14 |
15 | /**
16 | * 是否永远隐藏(是否显示眼睛图标)
17 | */
18 | private final BooleanProperty hideForever = new SimpleBooleanProperty();
19 |
20 | public boolean isHideForever() {
21 | return hideForever.get();
22 | }
23 |
24 | public BooleanProperty hideForeverProperty() {
25 | return hideForever;
26 | }
27 |
28 | public void setHideForever(boolean hideForever) {
29 | this.hideForever.set(hideForever);
30 | }
31 |
32 | @Override
33 | protected Skin> createDefaultSkin() {
34 | return new PasswordTextFieldSkin(this);
35 | }
36 |
37 | }
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/FxmlTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import javafx.application.Application;
4 | import javafx.fxml.FXML;
5 | import javafx.fxml.FXMLLoader;
6 | import javafx.scene.Parent;
7 | import javafx.scene.Scene;
8 | import javafx.stage.Stage;
9 |
10 | import java.io.IOException;
11 |
12 | /**
13 | * @author 肖嘉威 xjw580@qq.com
14 | * @date 2023/10/23 21:14
15 | */
16 | public class FxmlTest extends Application {
17 |
18 | public static void main(String[] args) {
19 | launch(args);
20 | }
21 |
22 | @FXML
23 | private MyPoint point;
24 | @FXML void initialize(){
25 | System.out.println("items:" + point.getChildren());
26 | }
27 |
28 | @Override
29 | public void start(Stage primaryStage) throws IOException {
30 | FXMLLoader loader = new FXMLLoader();
31 | Parent root = loader.load(getClass().getResourceAsStream("FxmlTest.fxml"));
32 | Scene scene = new Scene(root);
33 | primaryStage.setScene(scene);
34 | primaryStage.show();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/MessageIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/CopyLabelTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/IconsTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://jitpack.io/#xjw580/javafx-ui) 
2 |
3 | ## JavaFX-UI
4 |
5 |
6 |
7 | 
8 |
9 | > 适用于javafx的ui组件库(Javafx-based ui component library)
10 |
11 |
12 |
13 | ## 使用
14 |
15 | 1. javafx-ui在maven中央仓库不可用,但可以添加jitpack存储库使用
16 |
17 | ```xml
18 |
19 | jitpack.io
20 | https://jitpack.io
21 |
22 | ```
23 |
24 | 2. 添加最新版本的javafx-ui,就像添加一个正常的依赖一样,例如:
25 |
26 | ```xml
27 |
28 | com.github.xjw580
29 | javafx-ui
30 | 0.2.8
31 |
32 | ```
33 |
34 |
35 |
36 |
37 |
38 | ## 组件和样式查看
39 |
40 | - 拉取项目到本地启动 [DemoApplication](src/main/java/club/xiaojiawei/demo/DemoApplication.java) 类
41 | - 查看 [Wiki](https://github.com/xjw580/javafx-ui/wiki)
42 |
43 |
44 |
45 | ## [更新历史](HISTORY.md)
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/controls/ico/StartIco.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.controls.ico;
2 |
3 | import club.xiaojiawei.controls.images.ImagesLoader;
4 | import javafx.scene.layout.StackPane;
5 | import org.girod.javafx.svgimage.SVGImage;
6 | import org.girod.javafx.svgimage.SVGLoader;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * @date 2023/10/31 0:05
11 | */
12 | public class StartIco extends AbstractIco {
13 |
14 | public StartIco() {
15 | this(null);
16 | }
17 |
18 | public StartIco(String color) {
19 | super(color);
20 | SVGImage svgImage = SVGLoader.load(ImagesLoader.class.getResource(this.getClass().getSimpleName() + ".svg"));
21 | if (svgImage != null) {
22 | this.setMaxWidth(svgImage.getWidth());
23 | this.getChildren().add(svgImage);
24 | }
25 | }
26 |
27 | @Override
28 | public String getColorStyle(String color) {
29 | return String.format("* { " +
30 | "-fx-stroke: %s!important;;" +
31 | "}", color);
32 | }
33 |
34 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/style/ToggleButtonTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/date.css:
--------------------------------------------------------------------------------
1 | @import "common/date-time-common.css";
2 |
3 | .date-root-pane:disabled .javafx-ui-ico {
4 | -fx-opacity: 0.5;
5 | }
6 |
7 | .text-field {
8 | -fx-pref-width: 18;
9 | -fx-padding: 0;
10 | -fx-border-color: transparent;
11 | -fx-background-color: transparent;
12 | -fx-accent: main-color;
13 | }
14 |
15 | .dateSeparator {
16 | -fx-font-size: 17;
17 | -fx-translate-y: -1;
18 | }
19 |
20 | .dateSeparator * {
21 | -fx-fill: grey;
22 | }
23 |
24 | .dateBackground {
25 | -fx-border-color: main-shallow-color;
26 | -fx-pref-height: 30;
27 | -fx-pref-width: 115;
28 | -fx-border-radius: 15;
29 | -fx-background-radius: 15;
30 | -fx-background-color: white;
31 | }
32 |
33 | .hideIcoDateBackground {
34 | -fx-pref-width: 93 !important;
35 | }
36 |
37 | .dateBackgroundFocus {
38 | -fx-border-color: main-color !important;
39 | /*-fx-effect: dropshadow(gaussian, main-shallow-color, 10, 0, 0, 0)!important;*/
40 | }
41 |
42 | #dateIco {
43 | -fx-scale-x: 0.9;
44 | -fx-scale-y: 0.9;
45 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/TransmissionIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/component/TableCheckFilter.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.component;
2 |
3 | import club.xiaojiawei.controls.TableFilterManagerGroup;
4 | import javafx.scene.control.Label;
5 | import javafx.scene.control.TableColumn;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2024/5/13 15:55
10 | */
11 | public class TableCheckFilter extends TableValueFilter {
12 |
13 | public TableCheckFilter(TableColumn tableColumn, TableFilterManagerGroup managerGroup) {
14 | super(tableColumn, managerGroup);
15 | }
16 |
17 | @Override
18 | protected Label createShowGraphic(Statistics item) {
19 | T value = item.getValue();
20 | String text = null;
21 | if (value instanceof Number number) {
22 | text = number.intValue() > 0? "选中" : "未选中";
23 | } else if (value instanceof Boolean bool) {
24 | text = bool? "选中" : "未选中";
25 | }
26 | return new Label(text);
27 | }
28 |
29 | @Override
30 | protected boolean disableFilter() {
31 | return true;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/EventIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/style/TextFieldTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/DateTime.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/css/common/list-view.css:
--------------------------------------------------------------------------------
1 | @import "common.css";
2 |
3 | .list-view-ui {
4 | -fx-background-color: background-color;
5 | -fx-border-color: #e0e0e0;
6 | -fx-border-width: 1;
7 | -fx-border-radius: 3;
8 | -fx-background-radius: 3;
9 | }
10 |
11 | .list-view-ui .list-cell {
12 | -fx-background-color: transparent;
13 | -fx-text-fill: #000000;
14 | -fx-padding: 7;
15 | -fx-border-color: transparent transparent #eeeeee transparent;
16 | -fx-border-width: 0 0 1 0;
17 | }
18 |
19 | /*Size*/
20 |
21 | .list-view-ui-tiny .list-cell {
22 | -fx-padding: 0!important;
23 | }
24 | .list-view-ui-small .list-cell {
25 | -fx-padding: 3!important;
26 | }
27 | .list-view-ui-big .list-cell {
28 | -fx-padding: 10!important;
29 | }
30 |
31 | .list-view-ui .list-cell:hover {
32 | -fx-background-color: hover-color;
33 | -fx-cursor: hand;
34 | }
35 |
36 | .list-view-ui .list-cell:selected {
37 | -fx-background-color: #a7d2ff;
38 | -fx-text-fill: white;
39 | }
40 |
41 | .list-view-ui .list-cell:selected:hover {
42 | -fx-background-color: #a7d2ff;
43 | }
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/FoldUpIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/OKIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/Notification.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/skin/NumberFieldSkin.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.skin;
2 |
3 | import club.xiaojiawei.controls.NumberField;
4 | import javafx.scene.control.Button;
5 | import javafx.scene.paint.Paint;
6 |
7 | /**
8 | * @author 肖嘉威 xjw580@qq.com
9 | * @date 2024/2/19 17:35
10 | */
11 | public class NumberFieldSkin extends IconTextFieldSkin {
12 |
13 | public NumberFieldSkin(NumberField numberField) {
14 | super(numberField);
15 |
16 | Button subBtn = buildIconButton("M11.3,1.4H.7c-.38,0-.7-.31-.7-.7S.31,0,.7,0H11.3c.38,0,.7,.31,.7,.7s-.31,.7-.7,.7Z", Paint.valueOf("#4E5053FF"));
17 | subBtn.setId("sub-btn");
18 | subBtn.setOnAction(actionEvent -> numberField.decrement());
19 | Button addBtn = buildIconButton("M11.4,5.4H6.6V.6c0-.33-.27-.6-.6-.6s-.6,.27-.6,.6V5.4H.6c-.33,0-.6,.27-.6,.6s.27,.6,.6,.6H5.4v4.8c0,.33,.27,.6,.6,.6s.6-.27,.6-.6V6.6h4.8c.33,0,.6-.27,.6-.6s-.27-.6-.6-.6Z", Paint.valueOf("#4E5053FF"));
20 | addBtn.setId("add-btn");
21 | addBtn.setOnAction(actionEvent -> numberField.increment());
22 |
23 | addTipButton(subBtn, addBtn);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/Test.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import javafx.application.Application;
4 | import javafx.stage.Stage;
5 |
6 | import java.io.IOException;
7 |
8 | /**
9 | * @author 肖嘉威 xjw580@qq.com
10 | * * @date 2023/10/23 21:14
11 | */
12 | public class Test extends Application {
13 |
14 | public static void main(String[] args) {
15 | launch(args);
16 | }
17 |
18 | @Override
19 | public void start(Stage primaryStage) throws IOException {
20 | // Rectangle rectangle = new Rectangle();
21 | // rectangle.setStyle("-fx-fill: grey");
22 | // rectangle.setHeight(200);
23 | // rectangle.setWidth(200);
24 | //
25 | // TestIcos testIcos = new TestIcos();
26 | // Circle circle = new Circle();
27 | // circle.setRadius(290);
28 | // circle.setCenterX(290);
29 | // circle.setCenterY(290);
30 | // testIcos.setClip(circle);
31 | //// rectangle.setClip(circle);
32 | // Scene scene = new Scene(new StackPane(testIcos), 800, 800);
33 | // primaryStage.setScene(scene);
34 | // primaryStage.show();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/PasswordShowFieldTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.controls.PasswordTextField;
4 | import javafx.application.Application;
5 | import javafx.scene.Scene;
6 | import javafx.scene.layout.AnchorPane;
7 | import javafx.stage.Stage;
8 |
9 | /**
10 | * @author 肖嘉威 xjw580@qq.com
11 | * @date 2023/10/31 14:27
12 | */
13 | public class PasswordShowFieldTest extends Application {
14 |
15 | public static void main(String[] args) {
16 | launch(args);
17 | }
18 |
19 | @Override
20 | public void start(Stage primaryStage) {
21 | PasswordTextField passwordTextField = new PasswordTextField();
22 | passwordTextField.textProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue));
23 | AnchorPane anchorPane = new AnchorPane();
24 | passwordTextField.setTranslateX(50);
25 | passwordTextField.setTranslateY(50);
26 | anchorPane.getChildren().add(passwordTextField);
27 | Scene scene = new Scene(anchorPane, 400, 200);
28 | primaryStage.setScene(scene);
29 | primaryStage.show();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/Date.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/AutoMeasureIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/ShrinkIco.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/Time.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/EnlargeIco.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/component/FileUploaderItem.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/BrokenLineIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build and Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*.*.*'
7 |
8 | permissions:
9 | contents: write
10 |
11 | jobs:
12 | build:
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - name: Checkout Code
17 | uses: actions/checkout@v2
18 | with:
19 | fetch-depth: 0
20 |
21 | - name: Cache local Maven repository
22 | uses: actions/cache@v3
23 | with:
24 | path: ~/.m2/repository
25 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
26 | restore-keys: |
27 | ${{ runner.os }}-maven-
28 |
29 | - name: Set up JDK
30 | uses: actions/setup-java@v2
31 | with:
32 | java-version: '21'
33 | distribution: 'temurin'
34 |
35 | - name: Build with Maven
36 | run: mvn clean package -B -V
37 |
38 | - name: Upload Release Assets
39 | uses: softprops/action-gh-release@v1
40 | with:
41 | name: javafx-ui_${{ github.ref_name }}
42 | body: ${{ steps.get_commit.outputs.message }}
43 | prerelease: false
44 | env:
45 | GITHUB_TOKEN: ${{ github.token }}
46 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/RulerIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/component/IconTextField.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.component;
2 |
3 | import club.xiaojiawei.skin.IconTextFieldSkin;
4 | import javafx.beans.property.BooleanProperty;
5 | import javafx.beans.property.SimpleBooleanProperty;
6 | import javafx.scene.control.TextField;
7 |
8 | /**
9 | * @author 肖嘉威
10 | * @date 2024/10/8 9:31
11 | */
12 | public abstract class IconTextField extends TextField {
13 |
14 | private final BooleanProperty hideIcon = new SimpleBooleanProperty(false);
15 |
16 | public boolean isHideIcon() {
17 | return hideIcon.get();
18 | }
19 |
20 | public void setHideIcon(boolean hideIcon) {
21 | this.hideIcon.set(hideIcon);
22 | }
23 |
24 | public BooleanProperty hideIconProperty() {
25 | return hideIcon;
26 | }
27 |
28 | public IconTextField() {
29 | skinProperty().addListener((observableValue, skin, t1) -> {
30 | if (t1 instanceof IconTextFieldSkin iconTextFieldSkin) {
31 | iconTextFieldSkin.hideIconProperty().bindBidirectional(hideIcon);
32 | }
33 | });
34 | }
35 |
36 | @Override
37 | abstract protected IconTextFieldSkin createDefaultSkin();
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/FilterFieldTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.JavaFXUI;
4 | import club.xiaojiawei.controls.FilterField;
5 | import club.xiaojiawei.controls.NumberField;
6 | import javafx.application.Application;
7 | import javafx.application.Platform;
8 | import javafx.scene.Group;
9 | import javafx.scene.Scene;
10 | import javafx.scene.layout.StackPane;
11 | import javafx.stage.Stage;
12 |
13 | import java.util.Timer;
14 | import java.util.TimerTask;
15 |
16 | /**
17 | * @author 肖嘉威 xjw580@qq.com
18 | * @date 2024/2/19 15:19
19 | */
20 | public class FilterFieldTest extends Application {
21 |
22 | public static void main(String[] args) {
23 | launch(args);
24 | }
25 |
26 | @Override
27 | public void start(Stage primaryStage) {
28 | FilterField filterField = new FilterField();
29 | filterField.setOnFilterAction(System.out::println);
30 | filterField.getStyleClass().addAll("text-field-ui", "text-field-ui-small");
31 | Scene scene = new Scene(new StackPane(new Group(filterField)), 500, 500);
32 | JavaFXUI.addjavafxUIStylesheet(scene);
33 | primaryStage.setScene(scene);
34 | primaryStage.show();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/WindowBar.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/ScreenshotIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/controls/DateTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/controls/images/LampIco.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/CalendarTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.JavaFXUI;
4 | import club.xiaojiawei.controls.Calendar;
5 | import javafx.application.Application;
6 | import javafx.scene.Scene;
7 | import javafx.scene.layout.AnchorPane;
8 | import javafx.stage.Stage;
9 |
10 | import java.io.IOException;
11 | import java.time.LocalDate;
12 |
13 | /**
14 | * @author 肖嘉威 xjw580@qq.com
15 | * @date 2023/10/23 21:14
16 | */
17 | public class CalendarTest extends Application {
18 |
19 | public static void main(String[] args) {
20 | launch(args);
21 | }
22 |
23 | @Override
24 | public void start(Stage primaryStage) throws IOException {
25 | Calendar calendar = new Calendar();
26 | calendar.setLocalDate(LocalDate.of(9999, 12, 1));
27 | calendar.readOnlyDateProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue));
28 | System.out.println(calendar.getDate());
29 | calendar.setTranslateX(50);
30 | calendar.setTranslateY(50);
31 | Scene scene = new Scene(new AnchorPane(calendar), 400, 500);
32 | JavaFXUI.addjavafxUIStylesheet(scene);
33 | primaryStage.setScene(scene);
34 | primaryStage.show();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/DateSelectorTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.controls.DateSelector;
4 | import javafx.application.Application;
5 | import javafx.application.Platform;
6 | import javafx.scene.Group;
7 | import javafx.scene.Scene;
8 | import javafx.stage.Popup;
9 | import javafx.stage.Stage;
10 |
11 | /**
12 | * @author 肖嘉威 xjw580@qq.com
13 | * @date 2023/10/24 23:17
14 | */
15 | public class DateSelectorTest extends Application {
16 |
17 | public static void main(String[] args) {
18 | launch(args);
19 | }
20 |
21 | @Override
22 | public void start(Stage primaryStage) {
23 | // DateSelector dateSelector = new DateSelector();
24 | // dateSelector.dateProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue));
25 | // Scene scene = new Scene(dateSelector);
26 | Scene scene = new Scene(new Group());
27 | primaryStage.setScene(scene);
28 | primaryStage.show();
29 | Platform.runLater(() -> {
30 | Popup popup = new Popup();
31 | DateSelector dateSelector1 = new DateSelector();
32 | popup.getContent().add(dateSelector1);
33 | popup.show(primaryStage);
34 | });
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/demo/tab/style/ContextMenuController.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.demo.tab.style;
2 |
3 | import club.xiaojiawei.controls.ico.ClearIco;
4 | import club.xiaojiawei.controls.ico.HelpIco;
5 | import javafx.fxml.FXML;
6 | import javafx.scene.control.ContextMenu;
7 | import javafx.scene.control.MenuItem;
8 | import javafx.scene.control.ScrollPane;
9 | import javafx.scene.layout.HBox;
10 | import javafx.scene.layout.StackPane;
11 | import javafx.scene.text.Text;
12 |
13 | /**
14 | * @author 肖嘉威 xjw580@qq.com
15 | * @date 2024/3/6 16:00
16 | */
17 | public class ContextMenuController {
18 |
19 | @FXML
20 | private ScrollPane scrollPane;
21 | @FXML
22 | private StackPane rootPane;
23 |
24 | @FXML void initialize(){
25 | ContextMenu contextMenu = new ContextMenu();
26 | contextMenu.getStyleClass().add("context-menu-ui");
27 | contextMenu.getItems().addAll(
28 | new MenuItem(){{setGraphic(new HBox(new HelpIco(), new Text("帮助")){{setStyle("-fx-spacing: 5;-fx-alignment: CENTER");}});}},
29 | new MenuItem(){{setGraphic(new HBox(new ClearIco(), new Text("删除")){{setStyle("-fx-spacing: 5;-fx-alignment: CENTER");}});}}
30 | );
31 | scrollPane.setContextMenu(contextMenu);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/InputTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import javafx.animation.FadeTransition;
4 | import javafx.animation.ParallelTransition;
5 | import javafx.animation.ScaleTransition;
6 | import javafx.application.Application;
7 | import javafx.geometry.Insets;
8 | import javafx.geometry.Pos;
9 | import javafx.scene.Scene;
10 | import javafx.scene.control.Label;
11 | import javafx.scene.control.TextField;
12 | import javafx.scene.layout.*;
13 | import javafx.scene.paint.Color;
14 | import javafx.scene.paint.Paint;
15 | import javafx.scene.shape.Circle;
16 | import javafx.scene.shape.Rectangle;
17 | import javafx.stage.Popup;
18 | import javafx.stage.Stage;
19 | import javafx.util.Duration;
20 |
21 | /**
22 | * @author 肖嘉威 xjw580@qq.com
23 | * @date 2023/10/28 1:03
24 | */
25 | public class InputTest extends Application {
26 |
27 | public static void main(String[] args) {
28 | launch(args);
29 | }
30 |
31 | @Override
32 | public void start(Stage stage) throws Exception {
33 | StackPane root = new StackPane();
34 | stage.setScene(new Scene(root, 300, 300));
35 | stage.show();
36 | Popup popup = new Popup();
37 | popup.getContent().add(new TextField());
38 | popup.show(stage);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/resources/club/xiaojiawei/demo/tab/style/ContextMenuTab.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/main/java/club/xiaojiawei/test/TranslateTest.java:
--------------------------------------------------------------------------------
1 | package club.xiaojiawei.test;
2 |
3 | import club.xiaojiawei.controls.Carousel;
4 | import javafx.application.Application;
5 | import javafx.scene.Scene;
6 | import javafx.scene.control.Button;
7 | import javafx.scene.layout.AnchorPane;
8 | import javafx.scene.layout.StackPane;
9 | import javafx.scene.text.Text;
10 | import javafx.stage.Stage;
11 |
12 | /**
13 | * @author 肖嘉威 xjw580@qq.com
14 | * @date 2024/2/21 16:30
15 | */
16 | public class TranslateTest extends Application {
17 |
18 | public static void main(String[] args) {
19 | launch(args);
20 | }
21 |
22 | @Override
23 | public void start(Stage primaryStage) {
24 | Button button = new Button("click");
25 | Text text = new Text("hhh");
26 | AnchorPane anchorPane = new AnchorPane(button);
27 | anchorPane.getChildren().add(text);
28 | button.setOnAction(actionEvent -> {
29 | anchorPane.setPrefWidth(150);
30 | });
31 | anchorPane.setPrefWidth(300);
32 | anchorPane.setRightAnchor(text, 5D);
33 | anchorPane.setTopAnchor(text, 250D);
34 | Scene scene = new Scene(new AnchorPane(anchorPane), 500, 500);
35 | primaryStage.setScene(scene);
36 | primaryStage.show();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------