使用gen-class在Clojure中创建JavaFX类

时间:2017-03-27 14:19:20

标签: javafx clojure clojure-java-interop

我编写桌面应用程序。最近我一直在使用JavaFX作为GUI部分。我 Clojure但是在做一些稍微复杂的事情时遇到了问题。

UI的许多自定义(将复选框添加到一组列表项,更改表中交替行的颜色,在树视图中设置图标等)都需要扩展JavaFX类。在我的特定情况下,我一直试图扩展javafx.scene.control.Cell或其中一个衍生物。

我无法弄清楚如何在Clojure中做到这一点。几天前,我发布了关于如何扩展TextFieldListCell的{​​{3}},但很少受到关注。经过几天的调查,似乎问题在Clojure和JavaFX之间的互操作中更为普遍。几年前在Clojure Google小组中提出了similar question,但由此产生的补丁似乎不适合我的情况。 当我在Clojure中编译ExceptionInInitializerErrorgen-class时,我尝试扩展此类的所有尝试都会导致proxy工具包未被初始化。

我想出了一个解决方法,我只是用Java实现扩展类并将其导入Clojure项目。它有效,但很难看。

是否有一种在Clojure中扩展此类JavaFX类的通用方法?例如, 扩展javafx.scene.control.ListCell的以下Java类如何用Clojure编写。

import javafx.scene.control.ListCell;
import javafx.scene.text.Font;

public class FontFaceListCell extends ListCell<String> {
    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
        } else {
            setFont(Font.font(item, 16.0d));
            setText(item);
        }
    }
}

0 个答案:

没有答案