1

OverlayLayout を使用して、JTabbedPane の上部のタブに沿って小さなテキストを配置しようとしていますが、うまくいかないようです。

注として、私は JLayeredPane を使用していましたが、親コンポーネントを埋めるために TabbedPane が必要であり、いくつかの仕上げなしでは機能しないように見えました。

とにかく、配置をそのままにしておくと、動作は期待どおりに機能するようです (ボタンが背景の上に浮かびます)。ただし、何らかの配置を使用する場合 (これがこのレイアウト マネージャーで位置を設定する方法であると私は理解しています)、ボタンがあるべき場所の端に背景を縮小します。

ここにいくつかのサンプルコードがあります。

import java.awt.Color;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Container c = frame.getContentPane();
        c.setLayout(new OverlayLayout(c));

        JButton button = new JButton("Test");
        JPanel background = new JPanel();
        background.setBackground(Color.BLUE);
        background.setSize(500, 500);
        // toggle the following between 0 and 100 to see the described behavior
        background.setAlignmentX(100);

        frame.add(background);
        frame.add(button);

        frame.pack();
        frame.setSize(800, 800);
        frame.setVisible(true);

    }
}

任意の提案をいただければ幸いです。

4

2 に答える 2

5

setGlassPaneフレーム内でペインを他のペインの上に置く方法を使用できます。http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.htmlで確認してください

于 2012-05-02T17:34:16.587 に答える
2

別のものをオーバーレイするJComponentsを本当に作成したい場合は、

  • JLayeredPane --> 時代遅れで、最大 6 番目の LayeredPanes しか使用できません

  • Java6 の JXLayer または Java7 の JLayer としての直接実装

  • 簡単なオーバーレイの場合、GlassPane も使用できます。

于 2012-05-02T17:53:34.023 に答える