Tag: tornadofx

TornadoFX在TreeView上拖放

我是JavaFX的新手,因此也对TornadoFX感兴趣,请耐心等待。 我在Java中有一个简单的应用程序,但想把它移动到Kotlin,并遇到在TornadoFX中找到相应机制的问题。 我有一个ListView的IStoryItem代表故事和章节的实现。 我希望能够把章节转移,甚至从一个故事转移到另一个故事。 Java中的TreeView在其setCellFactory调用中有以下实现: tv.setCellFactory(new Callback<TreeView<IStoryItem>, TreeCell<IStoryItem>>() { @Override public TreeCell<IStoryItem> call(TreeView<IStoryItem> siTreeView) { TreeCell<IStoryItem> cell = new TreeCellStoryEditor(); cell.setOnDragDetected((MouseEvent event) -> { // Don't drag Story nodes. if (cell.getItem() instanceof Story) return; Dragboard db = cell.startDragAndDrop(TransferMode.MOVE); // Put the Part on the dragboard // From: https://stackoverflow.com/a/30916660/780350 ClipboardContent content = new ClipboardContent(); content.put(objectDataFormat, cell.getItem()); […]

即使UI线程似乎响应,标签文本也不会更新

我正在使用JDK 8u121上的Kotlin 1.1.51构建TornadoFX 1.7.11的应用程序。 我试图在一个单独的线程中执行长时间运行的任务,并使用进度条和标签在UI中显示进度。 奇怪的是,标签没有更新。 我认为,也许我以某种方式在UI线程上运行的任务,它卡住了,但进度条工作和用户界面是否响应(控制工作等)。 我也尝试用ScenicView手动编辑标签,它工作。 我没有想法,你们能帮忙吗? 这里有一些简化的代码片段: MainView.kt class MainView : View("") { private val controller: MainController by inject() override val root = borderpane { bottom(TasksView::class) } init { controller.reloadTranslations().completed.onChange { // do some lightweight UI stuff } } } MainController.kt class MainController : Controller() { private val tasksController: TasksController by inject() […]

连续动画在TornadoFX?

在阅读完文档后,我仍然对如何在另一个完成后执行动画感到困惑。 我有这样的时间表: timeline { keyframe(Duration.seconds(0.5)) { keyvalue(firstImg.scaleXProperty(), 1.0, interpolator = Interpolator.EASE_BOTH) keyvalue(firstImg.scaleYProperty(), 1.0, interpolator = Interpolator.EASE_BOTH) keyvalue(firstImg.rotateProperty(), 0.0, interpolator = Interpolator.EASE_BOTH) } keyframe(Duration.seconds(0.5)) { keyvalue(secondImg.scaleXProperty(), 1.0, interpolator = Interpolator.EASE_BOTH) keyvalue(secondImg.scaleYProperty(), 1.0, interpolator = Interpolator.EASE_BOTH) keyvalue(secondImg.rotateProperty(), 0.0, interpolator = Interpolator.EASE_BOTH) } keyframe(Duration.seconds(0.5)) { keyvalue(thirdImg.scaleXProperty(), 1.0, interpolator = Interpolator.EASE_BOTH) keyvalue(thirdImg.scaleYProperty(), 1.0, interpolator = Interpolator.EASE_BOTH) keyvalue(thirdImg.rotateProperty(), 0.0, interpolator […]

在JavaFX TableView中平滑滚动

我正在使用TornadoFX在Kotlin上编写一个小型的聊天应用程序,这个程序到目前为止都是有效的。 我正在尝试使它在接收新消息时更具视觉吸引力。 消息在一个TableView (发送者 – 消息),但滚动到新的消息是不平稳的,我想。 我需要帮助的片段相对较短: addEventHandler(ScrollToEvent.ANY) { it.consume() timeline { val keyValue = KeyValue(/* property to change */, /* target value */, Interpolator.EASE_OUT) keyframe(0.25.seconds) { this.plusAssign(keyValue) } } } 一般来说,我需要帮助确定哪些属性需要更改以及目标应该在这一行中: KeyValue(/* property to change */, /* target value */, Interpolator.EASE_OUT)

tornadoFX togglebutton没有文本属性

我是kotlin和tornadoFX的新手。 在TornadoFX指南中,可以使用以下方法构建ToggleButton: togglebutton("OFF").action { text = if (isSelected) "ON" else "OFF" } 但是,当我将相同的代码复制到我的IDE,这是错的! 似乎tornadoFX中的togglebutton中没有文本属性?

如何使用TornadoFX树视图显示数据

我正在学习如何使用kotlin并开始使用tornadoFX。 我正在通过指南来试图学习它,但是我无法弄清楚“具有不同类型的TreeView”是什么意思。 这似乎是说,我应该使用星形投影,这是我知道,当你在呼叫中使用*。 然而,只要我这样做,树视图说'功能和属性的类型参数不允许投影' 这是我的代码: class MainView:View(“”){ override val root = treeview<*> { root = TreeItem(Person("Departments", "")) cellFormat { text = when (it) { is String -> it is Department -> it.name is Person -> it.name else -> throw IllegalArgumentException("Invalid Data Type") } } populate { parent -> val value = parent.value if (parent == […]

Tornadofx – 如何将参数传递给每一个实例的片段

我是javafx,kotlin和显然tornadofx的新手。 问题 : 如何将参数传递给每一个实例的片段? 比方说,我有一个表视图布局作为我的片段。 现在这个片段被用在多个地方,但有不同的数据集。 例如。 在下面添加片段: class SomeView : View() { … root += SomeViewFragment::class } class SomeAnotherView : View() { … root += SomeViewFragment::class } 声明片段: class SomeViewFragment : Fragment() { … tableview(someDataSetFromRestApiCall) { … } } 如何从SomeView和SomeAnotherView传递不同的someDataSetFromRestApiCall?

Kotlin和TornadoFX:将一个可观察的属性绑定到一个集合函数?

我有一个Market ,其中包含一个名为m_updates的MarketUpdate对象m_updates 。 对于UI,我使用类型安全的构建器在tableview中创建列,如下所示: override val root = tableview<Market> { val sortedMarketList = SortedList<Market>(markets) sortedMarketList.comparatorProperty().bind(this.comparatorProperty()) items = sortedMarketList … column("Strikes", Market::m_strikes) … m_strikes属性只是一个由Market对象直接拥有的SimpleIntegerProperty。 但是,我需要能够建立像这样的列: … column("Created At", Market::m_updates::first::m_time) … … column("Last Update", Market::m_updates::last::m_time) … 其中m_time是由MarketUpdate对象拥有的SimpleLongProperty。 当Market对象更新时,新的MarketUpdate对象被添加到m_updates集合的末尾。 这意味着绑定需要自动从一个对象转换到另一个对象,并且需要通知tableview并更新自己以反映新对象中的数据。 我认为通过上述集合的first()和last()函数的绑定以一种非常简单的方式捕获了这个想法,但是它不会被编译。 有许多属性,如m_strikes和m_time 。 我怎样才能达到这个优雅?

TornadoFX filechooser

我正在寻找javafx FileChooser (在Kotlin)的解决方案。 我坚持这个,我不能通过根查看,因为Window! 是期待: button("open some file") { setOnAction { val fileChooser = FileChooser(); val file = fileChooser.showOpenDialog(???) … } } 在这种情况下我应该通过什么?

java.lang.ClassNotFoundException:未在路径中找到类“com.my.app.example.Main”:DexPathList

我很难在adb上导致这个错误,因为我正在使用Kotlin , TornadoFX ( 一个JavaFX Kotlin库 )和Gluon与JFXMobile 。 当我使用胶子的androidInstall来建立我的项目,我遇到了这个错误,以及一个黑屏: java.lang.ClassNotFoundException: Didn't find class "com.my.app.example.Main" on path: DexPathList 我试图在这个应用程序中使用JavaFX 3D,但我不认为这是导致错误。 我检查了我的Android Manifest,包名与我的项目相同。 我的项目层次结构如下所示: root libs src android ios main kotlin com.my.app.example Main.kt 这可能是导致Android无法找到该文件? 由于没有Java文件夹。 我在我的gradle文件中有以下所有内容,已成功编译: apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'java' apply plugin: 'javafx-gradle-plugin' apply plugin: 'org.javafxports.jfxmobile' apply plugin: 'org.jetbrains.kotlin.android.extensions' dependencies { compile […]