5

JtabbedPaneとJFrameコンテンツペインの間、およびJTabbedPaneとその内部JPanelの間の余白を削除する方法を知りたいです。削除したい余白を丸で囲みました。緑の線は、jtabbedpane内のjpanel間のギャップを示しています。

名前の付いたメソッドを調べてみましsetMarginたが、JTabbedPaneに存在しません。また、別のレイアウト(ルートコンテンツペイン、jpanelなど)でHgapと(両方= 0)を確認しました。Vgap

だからどんな提案も歓迎します。ありがとう。

画像はこちら

まだ画像を投稿できません。

4

3 に答える 3

7

タブ付きペイン内のコンポーネントの周りにどれだけのスペースを設けるかは、ルック アンド フィール次第です。通常、これは、デスクトップのデフォルトに基づいて決定されます。JTabbedPane には、内部コンポーネントの周囲にインセットを設定するためのメソッドがありません。

これは、すべてのタブ付きペインに対してグローバルに設定できます(警告: MetalLookAndFeel で動作します。おそらくWindows L&F でも動作しますが、BasicLookAndFeel に基づいていない GTK や Nimbus ルック アンド フィールでは動作しないでしょう) これにより、VM 内のすべてのタブ付きペインの外観が変更されます。

UIManager.getDefaults().put("TabbedPane.contentBorderInsets", new Insets(0,0,0,0));
UIManager.getDefaults().put("TabbedPane.tabsOverlapBorder", true);

おそらく、JTabbedPane に EmptyBorder(0,0,0,0) があり、そこに配置するコンポーネントも同様であることを確認したいでしょう。

これがターゲット デスクトップで機能しない場合、代替手段は次のとおりです。

  • タブ付きペインがネイティブ アプリケーションのタブ付きペインと異なって見えることを気にしない場合、(不快な) 別の方法は、独自の TabbedPaneUI を作成することです。
  • このように表示する単一の JTabbedPane の UI デリゲートを MetalTabbedPaneUI またはこれらのプロパティに応答する他の UI デリゲートに設定します。
于 2011-03-03T17:09:41.217 に答える
6

私はちょうど同じ問題にぶつかり、他の誰もが完全な解決策であるとは思わなかったので、これを思いつきました:

    import javax.swing.plaf.basic.BasicTabbedPaneUI;

    tabbedPane.setUI(new BasicTabbedPaneUI() {
        private final Insets borderInsets = new Insets(0, 0, 0, 0);
        @Override
        protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
        }
        @Override
        protected Insets getContentBorderInsets(int tabPlacement) {
            return borderInsets;
        }
    });

paintContentBorder メソッドをオーバーライドしなくても同じように機能しますが、標準のものは他の多くのメソッドに委任されているように見えるため、そうすることでおそらくサイズ変更などの際に UI がわずかに効率的になります。

WindowMakerのLinux用Oracle Java 6 u43、Mac Java 6 u37を搭載したMac OS X 10.6.7、およびJava 7 u07を搭載したWindows 7でテストされています。うまくいけば、これは誰かを助けるでしょう:-)

于 2013-04-08T10:39:28.867 に答える
1

UI 要素にボーダーを設定することで余白が追加されます。の境界線の設定を見てくださいJTabbedPane

于 2011-03-03T16:49:07.853 に答える