gpt4 book ai didi

java - 如何从外部类以编程方式更新 Scala/Swing?

转载 作者:行者123 更新时间:2023-11-29 06:09:51 24 4
gpt4 key购买 nike

例如下面的代码显示了一个简单的表格

import java.awt.Dimension
import swing._

object SunsetTable extends SimpleSwingApplication {

var model = Array(List("BHP", 1).toArray)

lazy val ui = new BoxPanel(Orientation.Vertical) {
val table = new Table(model, Array("Security", "Price")) {
preferredViewportSize = new Dimension(1200, 600)
}
contents += new ScrollPane(table)
}

def top = new MainFrame {
contents = ui
}

}

假设我有一个外部类

class Counter {
for (i <- 1 to 10) {
// update SunsetTable with i
Thread.sleep(1000)
}
}

如何使用计数器 i 更新 SunsetTable“价格”列?

最佳答案

当您说 lazy val ui = new BoxPanel(Orientation.Vertical) { ... } 时,您正在对 BoxPanel 类进行新的匿名扩展。 ui 是一个 BoxPanel,因此只有公共(public) BoxPanel 成员在外部范围内可见。

解决此问题的一种方法是将 table 的声明移到 BoxPanel 之外,使其成为 SunsetTable 的一个字段。然后你可以说

SunsetTable.table.update(0,0,"ABC")

您也可以保持代码不变

SunsetTable.ui.contents(0).asInstanceOf[ScrollPane].contents(0)
.asInstanceOf[Table].update(0,0,"ABC")

最后,您可以声明一个扩展 BoxPanel 并包含 updateTable 方法的新类,并创建 ui 和它的实例,或者创建一个 Updatable 特性,您可以在 ui 声明中使用,使您的 ui 类型为 BoxPanel with Updatable,因此您可以访问 updateTable 方法。

关于java - 如何从外部类以编程方式更新 Scala/Swing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com