简体   繁体   English

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

[英]Add file filters to JavaFx Filechooser in Jython and parametrize them

I created a javaFX chooser file in Jython.我在 Jython 中创建了一个 javaFX 选择器文件。 It wasn't easy to port from Java to Jython, but in the end some results came.从 Java 移植到 Jython 并不容易,但最终还是有一些结果。 Now I would like to parameterize the obtained class, taking into account the file filters, so as to be able to use the object for browsing different from the type of filtered files.现在我想参数化获得的类,考虑到文件过滤器,以便能够使用对象来浏览不同于过滤文件类型的浏览器。
I tried to insert a fixed filter:我试图插入一个固定过滤器:

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)

But I have the following error:但我有以下错误:

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

I also tried to cast the filter into a list and to insert the filter into a list but the error persists.我还尝试将过滤器转换为列表并将过滤器插入到列表中,但错误仍然存​​在。

What am I doing wrong, and what should I do?我做错了什么,我该怎么办?
Thanks in advance.提前致谢。

You can solve your StackTrace using vector to parse the extension types, like this:您可以使用 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)

About using FileBrowser in others parts of your code, you have to understand how JavaFX works, you can use file in Controller class constructor and call this view using Scene class.关于在代码的其他部分使用 FileBrowser,您必须了解 JavaFX 的工作原理,您可以在 Controller 类构造函数中使用文件并使用 Scene 类调用此视图。 FileBrowser is extending Application class, this mean that is the root of your app, you should call others from this one. FileBrowser 正在扩展 Application 类,这意味着它是您的应用程序的根,您应该从这个调用其他人。

To understand more about this, I suggest you search about Scene and FXMLLoader.要了解更多相关信息,我建议您搜索 Scene 和 FXMLLoader。

I tested using Zulu Java FX 11 and Jython 2.7.1我使用 Zulu Java FX 11 和 Jython 2.7.1 进行了测试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM