我编写桌面应用程序。最近我一直在使用JavaFX作为GUI部分。我爱 Clojure但是在做一些稍微复杂的事情时遇到了问题。
UI的许多自定义(将复选框添加到一组列表项,更改表中交替行的颜色,在树视图中设置图标等)都需要扩展JavaFX类。在我的特定情况下,我一直试图扩展javafx.scene.control.Cell
或其中一个衍生物。
我无法弄清楚如何在Clojure中做到这一点。几天前,我发布了关于如何扩展TextFieldListCell
的{{3}},但很少受到关注。经过几天的调查,似乎问题在Clojure和JavaFX之间的互操作中更为普遍。几年前在Clojure Google小组中提出了similar question,但由此产生的补丁似乎不适合我的情况。
当我在Clojure中编译ExceptionInInitializerError
或gen-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);
}
}
}