我正在 Scala 中编写一个 Swing 应用程序,我希望通过坐标显式放置组件。在 Java Swing 中,这是通过将 LayoutManager 设置为 null,然后手动添加组件来完成的,如下所示:
JPanel p = new JPanel(null);
JLabel l = new JLabel("hi");
l.setLocation(3,3);
p.add(l);
我在网上看到了几篇关于 Scala 等价物的帖子,它们都使用了类似的解决方案:
import scala.swing._
class NullPanel extends Panel {
peer.setLayout(null)
protected def add(comp: Component, x: Int, y: Int) {
comp.peer.setBounds(new Rectangle(x,y,comp.bounds.width,comp.bounds.height))
peer.add(comp.peer)
}
}
如果我在这样的应用程序中使用这个类:
import scala.swing._
object Frame extends SimpleSwingApplication{
val pan = new NullPanel {
preferredSize = new Dimension(500,500)
add(new Label("HI"),55,55)
}
def top = new MainFrame {
contents = pan
}
}
直观地说,这应该创建一个具有 500 x 500 面板的窗口,其中包含一个标签,其文本“HI”在坐标 (55,55) 处。但是,当我运行它时,面板是空的。我在这里做错了什么?如何实现具有任意内容放置的 Panel 类?