我在Scala "org.scala-lang" % "scala-swing" % "2.11.0-M7"中使用Swing。我想明确地为我的组件设置位置。在Swing API for Java中可以这样做。
问题:可以在Swing Scala中为组件设置绝对位置吗?
Scala示例的Swing API:
import scala.swing._
object PositionAbsolute extends SimpleSwingApplication {
lazy val top = new MainFrame() {
title = "PositionAbsolute"
val label = new Label("I want to be at (0, 0)")
val panel = new FlowPanel()
panel.preferredSize = new swing.Dimension(300, 400)
panel.contents += label
contents = panel
}
}

发布于 2022-06-15 10:13:43
我知道现在做出回应有点晚了--而且我根本不是这方面的专家,所以请耐心点。
如果您绝对希望或需要在scala中使用swing对控件进行绝对定位,下面是一种方法:
import scala.swing.{Button, Dimension, MainFrame}
object Main extends App {
val b1 = new Button {
text = "one"
preferredSize = new Dimension(60, 30)
}
val b2 = new Button {
text = "two"
preferredSize = new Dimension(80, 40)
}
val b3 = new Button("three")
b1.peer.setBounds(25, 5, b1.peer.getPreferredSize.width, b1.peer.getPreferredSize.height)
b2.peer.setBounds(55, 50, b2.peer.getPreferredSize.width, b2.peer.getPreferredSize.height)
b3.peer.setBounds(150, 15, b3.peer.getPreferredSize.width, b3.peer.getPreferredSize.height)
javax.swing.SwingUtilities.invokeLater(() => {
val frame: MainFrame = new MainFrame {
title = "AbsoluteLayoutDemo"
resizable = true
size = new Dimension(300, 150)
}
frame.peer.setLayout(null)
frame.peer.add(b1.peer)
frame.peer.add(b2.peer)
frame.peer.add(b3.peer)
frame.visible = true
})
}我自己也不太喜欢,但这个很管用。我用scala版本2.13.8和
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "3.0.0"在build.sbt文件中
这是我用docs.oracle.com/javase/tutorial/uiswing/layout/none.html翻译的java示例。
但是,我做了一些修改,我认为对于scala示例来说,这些修改是有意义的。
我不太清楚这种方法的后果是什么,所以请自己承担风险--因为我真的不确定这是如何工作的。
https://stackoverflow.com/questions/37401910
复制相似问题