java - 将文件过滤器添加到 Jython 中的 JavaFx Filechooser 并对其进行参数化

标签 java python javafx jython

我在 Jython 中创建了一个 javaFX 选择器文件。从 Java 移植到 Jython 并不容易,但最终还是有一些结果。现在我想参数化获得的类,考虑到文件过滤器,以便能够使用对象来浏览不同于过滤文件类型的浏览器。
我试图插入一个固定过滤器:

import sys

from javafx.application import Application
from javafx.stage import FileChooser, Stage

class fileBrowser(Application):

    @classmethod
    def main(cls, args):
        fileBrowser.launch(cls, args)

    def start(self, primaryStage):
        fc = FileChooser()
        filter = FileChooser.ExtensionFilter("All Images", '*.jpg')
        fc.getExtensionFilters().add(
            filter
        )

        f = fc.showOpenDialog(primaryStage)

if __name__ == '__main__':
    fileBrowser.main(sys.argv)
但我有以下错误:
Exception in Application start method
Traceback (most recent call last):
  File "provaFileChooser.py", line 28, in <module>
    fileBrowser.main(sys.argv)
  File "provaFileChooser.py", line 15, in main
    fileBrowser.launch(cls, args)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
        at java.lang.Thread.run(Unknown Source)
Caused by: Traceback (most recent call last):
  File "provaFileChooser.py", line 19, in start
    filter = FileChooser.ExtensionFilter("JPG Images", '*.jpg')
TypeError: javafx.stage.FileChooser$ExtensionFilter(): 2nd arg can't be coerced to java.util.List, String[]

        at org.python.core.Py.TypeError(Py.java:236)
        at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:213)
        at org.python.core.PyReflectedFunction.throwBadArgError(PyReflectedFunction.java:316)
        at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:325)
java.lang.RuntimeException: java.lang.RuntimeException: Exception in Application start method
我还尝试将过滤器转换为列表并将过滤器插入到列表中,但错误仍然存​​在。
我做错了什么,我该怎么办?
提前致谢。

最佳答案

您可以使用 vector 解析您的 StackTrace 来解析扩展类型,如下所示:

import sys

from java.io import File

from javafx.application import Application
from javafx.stage import FileChooser, Stage

class FileBrowser(Application):
    
    # I am a class attribute, Im called using NameClass.me
    # You have to remember this path is different according to SO
    initalDir = File("/home/miolivc/Documents/") # you have to handle this
    extensions = ["*.jpg"]

    @classmethod
    def main(cls, args):
        FileBrowser.launch(cls, args)

    def start(self, primaryStage):

        fc = FileChooser()
        filter = FileChooser.ExtensionFilter("All Images", FileBrowser.extensions)
        fc.getExtensionFilters().add(filter)
        fc.setInitialDirectory(FileBrowser.initalDir)

        choosed = fc.showOpenDialog(primaryStage)

        print("File: " + str(choosed))

if __name__ == '__main__':
    FileBrowser.main(sys.argv)
关于在代码的其他部分使用 FileBrowser,您必须了解 JavaFX 的工作原理,您可以在 Controller 类构造函数中使用文件并使用 Scene 类调用此 View 。 FileBrowser 正在扩展 Application 类,这意味着它是您的应用程序的根,您应该从这个调用其他人。
要了解更多相关信息,我建议您搜索 Scene 和 FXMLLoader。
我使用 Zulu Java FX 11 和 Jython 2.7.1 进行了测试

关于java - 将文件过滤器添加到 Jython 中的 JavaFx Filechooser 并对其进行参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63881222/

相关文章:

java - 向Word文档添加脚注

java - 如何使用Jackson ObjectMapper将多个数据转换为Pojo

python - 属性错误 : 'SigSafeLogger' object has no attribute 'logger'

java - JavaFX 并发修改异常

java - 尝试在我的 Controller 中使用原始版本和全屏版本的 Pane 也会更改窗口版本中的 Pane

java - 处理数组中的对象时出现越界

java - Netty 4 替代 LineBasedFrameDecoder

python - 可选参数,需要它们的某些组合

Python 子模块未导入

java - 如何从日期选择器中获取字符串形式的值,即使它不是日期格式(JavaFX)?