Skip to content

[Feature] 截图管理#5793

Open
Calboot wants to merge 18 commits intoHMCL-dev:mainfrom
Calboot:screenshot
Open

[Feature] 截图管理#5793
Calboot wants to merge 18 commits intoHMCL-dev:mainfrom
Calboot:screenshot

Conversation

@Calboot
Copy link
Copy Markdown
Contributor

@Calboot Calboot commented Mar 15, 2026

Resolves #5535

  • 截图预览与删除
  • 多选删除
  • 清空
  • 导航到文件夹
  • 复制到剪贴板
  • 按日期批量选中

@WhatDamon

This comment was marked as resolved.

@Calboot
Copy link
Copy Markdown
Contributor Author

Calboot commented Mar 22, 2026

我觉得可以考虑添加双击预览的功能,目前通过右键预览多少有点不符合使用习惯,而右侧当前用于预览的按钮则可以用来显示一些基本的元数据,例如截图时间,图片长宽尺寸,存储占用大小,图片所在路径等信息

我还是保留了那个按钮预览的功能,双击现在也能触发。元数据我也塞到那个窗口的副标题里面了。

图片所在路径我觉得没什么用,全都在一个文件夹里。

@Calboot Calboot marked this pull request as ready for review March 22, 2026 05:46
@3gf8jv4dv

This comment was marked as resolved.

@3gf8jv4dv

This comment was marked as resolved.

@3gf8jv4dv
Copy link
Copy Markdown
Contributor

点击「选择日期」,启动器出现了一批日志:

Details
[xx:xx:xx] [@.ui.construct.JFXDialogPane.push/INFO] JFXDialogPane@521c36da [FXUtils$DateRangeDialog@66cca2b[styleClass=jfx-dialog-layout]]
[xx:xx:xx] [com.jfoenix.skins.JFXDatePickerSkin.<init>/WARNING] Cannot remove focusedProperty listener
java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "<parameter1>" is null
	at com.jfoenix.adapters.ReflectionHelper.getFieldContent(ReflectionHelper.java:55)
	at com.jfoenix.skins.JFXDatePickerSkin.<init>(JFXDatePickerSkin.java:46)
	at com.jfoenix.controls.JFXDatePicker.createDefaultSkin(JFXDatePicker.java:90)
	at javafx.controls/javafx.scene.control.Control.doProcessCSS(Control.java:910)
	at javafx.controls/javafx.scene.control.Control$1.doProcessCSS(Control.java:88)
	at javafx.controls/com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:68)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10069)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Scene.doCSSPass(Scene.java:625)
	at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2677)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:381)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:402)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:597)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:577)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:570)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$0(QuantumToolkit.java:351)
	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:173)
	at java.base/java.lang.Thread.run(Thread.java:1516)
[xx:xx:xx] [com.jfoenix.skins.JFXDatePickerSkin.<init>/WARNING] Cannot remove focusedProperty listener
java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "<parameter1>" is null
	at com.jfoenix.adapters.ReflectionHelper.getFieldContent(ReflectionHelper.java:55)
	at com.jfoenix.skins.JFXDatePickerSkin.<init>(JFXDatePickerSkin.java:46)
	at com.jfoenix.controls.JFXDatePicker.createDefaultSkin(JFXDatePicker.java:90)
	at javafx.controls/javafx.scene.control.Control.doProcessCSS(Control.java:910)
	at javafx.controls/javafx.scene.control.Control$1.doProcessCSS(Control.java:88)
	at javafx.controls/com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:68)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1476)
	at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:126)
	at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:134)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10069)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:10062)
	at javafx.graphics/javafx.scene.Scene.doCSSPass(Scene.java:625)
	at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2677)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:381)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:402)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:597)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:577)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:570)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$0(QuantumToolkit.java:351)
	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:173)
	at java.base/java.lang.Thread.run(Thread.java:1516)

@3gf8jv4dv
Copy link
Copy Markdown
Contributor

选择日期对话框,每次点击文本框聚集时,启动器会出现一批日志。
切换到其他窗口,再切换回 HMCL 这个对话框,就会出现一次。

Details
[xx:xx:xx] [@.util.CrashReporter.uncaughtException/ERROR] Uncaught exception in thread JavaFX Application Thread
java.lang.ClassCastException: class com.jfoenix.controls.JFXDatePicker$FakeFocusTextField cannot be cast to class com.sun.javafx.scene.control.FakeFocusTextField (com.jfoenix.controls.JFXDatePicker$FakeFocusTextField is in unnamed module of loader 'app'; com.sun.javafx.scene.control.FakeFocusTextField is in module javafx.controls@26 of loader 'platform')
	at javafx.controls/javafx.scene.control.skin.ComboBoxPopupControl.lambda$new$2(ComboBoxPopupControl.java:146)
	at javafx.controls/com.sun.javafx.scene.control.ListenerHelper$3.changed(ListenerHelper.java:177)
	at javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:386)
	at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:91)
	at javafx.base/javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:78)
	at javafx.graphics/javafx.scene.Node$FocusPropertyBase.notifyListeners(Node.java:8325)
	at javafx.graphics/javafx.scene.Node$17.notifyListeners(Node.java:8413)
	at javafx.graphics/javafx.scene.Node.notifyFocusListeners(Node.java:8346)
	at javafx.graphics/javafx.scene.Scene.setWindowFocused(Scene.java:2187)
	at javafx.graphics/javafx.scene.Scene.lambda$new$1(Scene.java:2174)
	at javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:147)
	at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:91)
	at javafx.base/javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:78)
	at javafx.base/javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
	at javafx.base/javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:111)
	at javafx.base/javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145)
	at javafx.graphics/javafx.stage.Window.setFocused(Window.java:701)
	at javafx.graphics/javafx.stage.Window$1.setFocused(Window.java:160)
	at javafx.graphics/com.sun.javafx.stage.WindowHelper.setFocused(WindowHelper.java:110)
	at javafx.graphics/com.sun.javafx.stage.WindowPeerListener.changedFocused(WindowPeerListener.java:65)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.get(GlassWindowEventHandler.java:118)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.get(GlassWindowEventHandler.java:38)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:429)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:177)
	at javafx.graphics/com.sun.glass.ui.Window.handleWindowEvent(Window.java:1285)
	at javafx.graphics/com.sun.glass.ui.Window.notifyFocus(Window.java:1255)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:173)
	at java.base/java.lang.Thread.run(Thread.java:1516)

@3gf8jv4dv

This comment was marked as resolved.

@3gf8jv4dv

This comment was marked as resolved.

@Calboot
Copy link
Copy Markdown
Contributor Author

Calboot commented Mar 28, 2026

两个文本框没有对齐,观感不太好。

建议改成「Select by date」。对应的中文描述也要改。

预览对话框显示的信息单位(MB)建议换成 MiB 等。

解决

@Calboot
Copy link
Copy Markdown
Contributor Author

Calboot commented Mar 28, 2026

点击「选择日期」,启动器出现了一批日志:

这个没啥办法,JFoenix 的代码就这样

Calboot and others added 3 commits March 28, 2026 11:03
Co-authored-by: 3gf8jv4dv <3gf8jv4dv@gmail.com>
# Conflicts:
#	HMCL/src/main/resources/assets/css/root.css
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 游戏截图管理

3 participants