社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Edvin Syse

Edvin Syse 最近创建的主题
Edvin Syse 最近回复了
6 年前
回复了 Edvin Syse 创建的主题 » 如何在TornadoFx表视图中显示POJO属性?

你需要引用属性,而不是getter。 User::id . 要引用不可变属性,需要使用 readonlyColumn 建设者:

readonlyColumn("id", User::id)
readonlyColumn("name", User::name)

也就是说,您确实应该在域对象中使用javafx属性。在基于JavaFX的应用程序中不这样做只会使所有事情变得更困难,并且您可以从很多好处中解脱出来,或者至少您必须跳出困境。

下面是用可观察的JavaFX属性编写的完整应用程序。请注意,然后您将访问 idProperty nameProperty 而不是属性。使用此方法,对基础数据项的更改也将自动在TableView中可见:

class User(id: Int, name: String) {
    val idProperty = SimpleIntegerProperty(id)
    var id by idProperty

    val nameProperty = SimpleStringProperty(name)
    var name by nameProperty
}


private val data = listOf(User(111, "AAA"), User(222, "BBB"), User(333, "CCC"), User(444, "DDD")).observable()

class HelloWorld : View() {
    override val root = vbox {
        tableview(data) {
            column("id", User::idProperty)
            column("name", User::nameProperty)
        }
    }
}

要保持配置更改,只需调用 save() 在配置对象上。要保存全局应用程序配置设置,请致电 app.config.save() . 应用程序启动时自动加载更改。

您可以阅读指南中有关配置对象的更多信息:

https://github.com/edvin/tornadofx-guide/blob/master/part2/Config%20Settings%20and%20State.md

6 年前
回复了 Edvin Syse 创建的主题 » 在TornadoFx中使用工作区时如何使用范围?

这个 App 已经定义了 Scope 与相应的 Workspace 例如,当你的初始 View 停靠在 工作空间 你的新 ParentScope 定义新的 工作空间 实例。当你停靠 ChildView 进入 工作空间 它确实做到了这一点,但相关的工作区不会显示在屏幕上。

要解决这个问题,您可以这样覆盖应用程序的主要作用域:

class TestApp : WorkspaceApp(ParentView::class) {
    init {
        scope = ParentScope()
    }
}

还请注意,我使用 WorkspaceApp 子类,因此我不需要停靠 ParentView 手动。

在研究这个问题时,我意识到,如果您将一个ui组件停靠到一个工作区中,那么它应该假定它已经停靠在一个工作区中。出于这个原因,我已经提交了一个修复程序,这样您的初始代码就可以在不进行修改的情况下工作。

6 年前
回复了 Edvin Syse 创建的主题 » Kotlin Fx-TornadoFx应用程序可以作为Web应用程序部署吗?

您可以用JavaFX做任何事情,也可以用TornadoFX做任何事情,因为它基本上是JavaFX之上的一个更高级别的API。

JavaFX本身没有针对Web的渲染功能,但jpro通过使用WebSockets将JavaFX用户界面直接“渲染”为SVG,非常巧妙地实现了这一点。

事实上,Tornadofx有特殊的支持,可以更容易地创建基于jpro的应用程序。

你的出发点是 https://www.jpro.one/

TornadoFx指南还包含有关如何使用JPRO的信息:

https://github.com/edvin/tornadofx-guide/blob/master/part2/Scopes.md#using-tornadofx-with-jpro

JPRO是一种商业产品,在编写时(2018-11-20),一台具有8GB内存的服务器每月启动AV 99欧元。每个用户都会得到自己的应用程序实例,尽管仍然在同一个JVM中运行。

虽然这个系统工作得非常好,但它最适合在客户机和服务器之间存在低延迟、最好是高带宽的情况下使用,因为每个事件都将通过WebSocket连接进行传输。对于面向公众的网页来说,这通常是一个糟糕的选择,但它是可行的。事实上, http://jpro.one 实际上是一个javafx应用程序!

免责声明:我与jpro没有任何关系,我只是告诉你让javafx应用程序通过浏览器可用的唯一方法。

6 年前
回复了 Edvin Syse 创建的主题 » 如何在Tornadofx中将MinHeight和MinWidth设置为窗口?

你走对了。根组件的首选大小将成为窗口的初始大小。您可以进一步配置窗口的最小大小,但不能在uicomponent的构造函数中进行配置,因为它是在实际窗口显示之前创建的。因为这个原因, onDock 回调是配置窗口的好地方 setWindowMinSize . 如果这是主要的应用程序窗口,一个更好的策略是重写 start 并配置 minWidth minHeigh 的属性 Stage (这是一扇窗户)。

值得注意的是,便利功能 设置窗口大小 只有在重写时才可用 船坞 在uicomponent中,因为它被定义为设置uicomponent当前阶段最小大小的快捷方式。如果你重写 开始 ,您必须直接操作属性,如下所示:

class MyApp : App(MainView::class) {
    override fun start(stage: Stage) {
        with(stage) {
            minWidth = 600.0
            minHeight = 400.0
            super.start(this)
        }
    }
}

class MainView : View() {
    override val root = borderpane {
        setPrefSize(1200.0, 720.0)
    }
}

你可以设定 isResizable = false 在舞台/窗口 开始 如果要防止调整大小,也可以使用。

6 年前
回复了 Edvin Syse 创建的主题 » TornadoFx透明视图

你犯了几个错误,导致了这一点。首先,决不能手动实例化uicomponents(view,fragment)。这样做会使他们错过重要的生命周期回调。一个重要的回调是 onDock 这是操作指定场景的最佳位置。更改这两个问题并清除某些语法将导致此代码,这成功地使背景透明:

class MyApp : App(MyView::class)

class MyView : View() {
    override val root = stackpane {
        button("open").action {
            find<NextRoundView>().openModal(stageStyle = StageStyle.TRANSPARENT, block = true)
        }
    }
}

class NextRoundView : View("Következő kör") {
    override val root = vbox {
        style {
            backgroundColor += Color.TRANSPARENT
            backgroundImage += URI.create("/common/rope-bg-500x300.png")
            backgroundRepeat += BackgroundRepeat.NO_REPEAT to BackgroundRepeat.NO_REPEAT
        }
        prefWidth = 500.0
        prefHeight = 300.0

        spacing = 20.0
        padding = insets(50, 20)
        text("A text") {
            font = Font.font(40.0)
            alignment = Pos.CENTER
        }

        button("OK") {
            font = Font.font(20.0)
            action {
                close()
            }
        }
    }

    override fun onDock() {
        currentStage?.scene?.fill = null
    }
}

以下是应用程序的屏幕截图,其中包含实现的更改:

enter image description here

6 年前
回复了 Edvin Syse 创建的主题 » TornadoFx中的ListView使用缓存窗体时显示重复项

使用时 cache 您需要为每个项指定一个唯一的ID,这样框架就知道如何为给定表单元格中当前显示的项检索缓存的UI元素。这在JavaDoc中为 隐藏物 功能。

如果项目中有ID字段,则可以使用该字段,例如:

cache(rowItem.id) { }

您甚至可以使用单元格的值,如果它是唯一的:

cache(it) { }