座標によるコンポーネントの明示的な配置が必要な Scala で Swing アプリケーションを作成しています。Java Swing では、これは LayoutManager を null に設定し、次のようにコンポーネントを手動で追加することによって行われます。
JPanel p = new JPanel(null);
JLabel l = new JLabel("hi");
l.setLocation(3,3);
p.add(l);
これに似たソリューションを使用して、Web で 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
}
}
直観的に、これにより、座標 (55,55) にテキスト "HI" を持つラベルを含む 500 x 500 のパネルを持つウィンドウが作成されます。ただし、これを実行すると、パネルは空です。ここで何が間違っていますか?コンテンツを任意に配置して Panel クラスを実現するにはどうすればよいですか?