2011-11-23 8 views
2

JPanelの上にカスタム透明をオーバーレイしようとしています。私は、両方のコンポーネントをレイヤーペインの端まで伸ばしたいと思います。私はオーバレイを表示したいとき以外は一般的に何もしないように、トップコンポーネントのメソッドpaintComponentをオーバーライドしました。その後、適切なテキストを適切な場所に描画します。ここでこれは1つのパネルに複数のコンポーネントをオーバーレイする適切な方法ですか?

は、レイアウトの問題のために私のソリューションです:

JLayeredPane jlp = new JLayeredPane(); 
jlp.setLayout(new OverlayLayout(jlp) { 
    @Override 
    public void layoutContainer(Container target) { 
     for (Component c: target.getComponents()) 
      c.setBounds(0, 0, target.getWidth(), target.getHeight()); 
    } 
}); 

質問です - layoutContainerを上書きせずにこれを行うには良い方法はありますか?これは私のハックのようだ。つまり、コンポーネントをレイアウトするときにこれを行うオプションがないとは本当に信じられません。しかし、私がこのメソッドをオーバーライドしないと、それは上辺と左辺にギャップを残します。

ここに何か不足していますか、これはこれらの要件を処理する適切な方法ですか?

答えて

2

OverlayLayoutは、使用可能なスペース全体を満たすためにすべてのコンポーネントのサイズを設定するようには設計されていませんでした。実際には、カスタマイズされたレイアウトマネージャを作成しています。このアプローチには何も問題はありません。

なぜJLayeredPaneを使用しているのかわかりません。 OverlayLayoutと複数のコンポーネントを持つ通常のJPanelを使用するだけで済みます。

また、JLayeredPaneを使用する場合は、おそらくOverlayLayoutは必要ありません。サイズ変更されたイベントが生成されると、ComponentListenerをレイヤードペインに追加し、すべてのコンポーネントのサイズを変更できます。

関連する問題