2011-07-27 10 views
2

メインレイアウトにGroupLayoutを使用しています。内部パネルを追加するまで、ベースラインの整列がうまくいきます。これらのパネルにはベースラインが伝播していないようです:GroupLayoutのパネルに直接追加されたボタンやラベルなどはすべて、ベースラインに対して正しく整列されていますが、インナーパネルの内側のコンポーネントは正しく表示されません。GroupLayoutとネストされたパネルでベースラインが壊れた

Scalaのスイングは驚くほどGroupPanelを持っていないので、私はAndreas Flierlから1を使用していますが、私はそれが基本的なスイングクラスの問題だし、それらを調整する方法を確信しているとして、それは、重要ではありません。

スクリーンショットでは、インナーパネルがベースラインではなく底面とどのように位置合わせされているかを確認してください。この問題は、子パネルに使用されているレイアウトマネージャ(別のグループレイアウトでも可)とは関係ありません。

screenshot

答えて

0

基礎となるピアのgetBaselineをオーバーライドする必要があり、そうです。 Scala Swingでそれが問題になることはあまりありません(おそらくJava 1.6に依存するからでしょうか?)

val f = new Frame { 
    contents = new GroupPanel { 
    val but = new Button { text = "button" } 
    val lb = new Label { text = "label" } 
    val inner = new FlowPanel { 
     val b = new Button { text = "ibut" } 
     override lazy val peer: javax.swing.JPanel = 
     new javax.swing.JPanel(new java.awt.FlowLayout(1)) with SuperMixin { 
      override def getBaseline(w: Int, h: Int): Int = 
      b.peer.getBaseline(w, h) + getInsets().top 
     } 
     // vGap = 0 
     contents += b 
     contents += new Label { text = "ilab" } 
    } 
    theHorizontalLayout is Sequential(but, lb, inner) 
    theVerticalLayout is Parallel(Baseline)(but, lb, inner) 
    } 
    centerOnScreen() 
    pack() 
    open() 
} 
関連する問題