17

たとえば、使用可能なタブのリストが少なくとも 2 つのタブが存在する場合にのみ表示される Firefox と同様の動作が必要です。

私はまだそのようなものを見つけることができませんでした。

私が持っていた最良のアイデアは、レイアウトを手動で変更することでした:

  • 1 つのコンポーネントの場合は、それを周囲のパネルに追加するだけです
  • コンポーネントが追加された場合は、そのコンポーネントを周囲のパネルから削除し、代わりに JTabbedPane を追加して、以前のコンポーネントと新しいコンポーネントの両方をそのペインに追加します。
  • コンポーネントが削除され、ペインにコンポーネントが 1 つしか残っていない場合は、ペインを削除し、代わりに含まれているコンポーネントを追加します。

これはおそらく機能しますが、ハックまたは回避策のように感じます...

もっと良いアイデアはありますか?

ソリューションは、理想的には Java 1.5 と 1.6 の両方で機能するはずですが、1.6 のみのソリューションについても満足しています。

4

7 に答える 7

12

タブ ボタン領域の高さを計算する UI メソッドをオーバーライドして、タブ0が 1 つしかないときに高さを強制することができます。

tabbed_pane.setUI(new BasicTabbedPaneUI() {  
    @Override  
    protected int calculateTabAreaHeight(int tab_placement, int run_count, int max_tab_height) {  
        if (tabbed_pane.getTabCount() > 1)
            return super.calculateTabAreaHeight(tab_placement, run_count, max_tab_height);  
        else  
            return 0;  
    }  
});  
于 2012-01-17T15:56:44.607 に答える
5

手動で行う必要があると思います。どうやらそれは以前に行われたようですが、利用できないように見えるシステムのほんの一部としてのみです。

あなたのアプローチは私には良さそうです。私はあなたがそれをレイアウトしたのと同じようにそれを行い、そのすべてのロジックをカスタムでラップして、JComponentハック感が少なくなるようにします.

于 2009-06-03T00:14:27.200 に答える
5

単純に を使用する方がよい場合がありますCardLayout

于 2009-06-03T02:42:14.500 に答える
1

はい、方法があります。オラクルのWebサイトで見つけるのに4時間かかりました:http: //docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#setTabLayoutPolicy()

単にこれを使用してください:

//declare
private JTabbedPane editor = new JTabbedPane ();
//construct like this:
editor.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
//just add components and see how it goes.
editor.addTab("", newPanel);
于 2012-12-11T17:15:38.860 に答える
0

I think this can be achieved using tab bar and a card layout,

  • add the tab bar and card layout to a grid bag layout so that they re-size automatically
  • the max height of the tab bar should be the height of the tab
  • add a listener to tab bar so that when certain tabs are clicked it will switch the card layout to show appropriate content
  • hide the tab bar if it has only one tab

and this should do the job.

于 2011-08-03T18:35:01.367 に答える
0

もう 1 つのオプションは、JTabbedPane で使用される L&F デリゲート (関心のあるプラットフォームに応じて BasicTabbedPaneUI または WindowsTabbedPaneUI のいずれか) をカスタマイズすることです。これにより、単一のタブのみが表示されている場合に、タブ付きペインの動作をカスタマイズできます。

これは物事を行う別の方法ですが、これはかなりの作業であり、マイケルが言ったことを実行することで、はるかに少ない労力で行きたい場所にたどり着くことができます. このオプションを知らなかった場合に備えて、これを回答として投稿したかっただけです。

于 2011-08-01T19:44:17.320 に答える