以前に JTabbedPane
を使用すると、すべてのタブが 1 行に収まらない場合、JTabbedPane
で複数の行になるように行が折り返されました。このような表示方法の代わりに、JTabbedPane
に代替スキームを提供して、タブを単一のスクロール可能な行に設定できるようにしてほしいという多くの要求がありました。このドキュメントでは、1.4 リリースの JTabbedPane
でサポートされる、スクロール可能なタブを提供する新規 API について説明します。この変更に関連するバグ追跡レポート: 4093898.
タブが複数行に折り返される場合は、ユーザーが一度にすべてのタブを見ることができるという長所があります。
ただし、複数行になった場合の問題は、ウィンドウの表示領域に隣接していない行のタブをユーザーが選択したときの処理で発生します。Windows および Motif の Look & Feel 実装では、このアクションで、選択したタブを含む行がウィンドウ表示領域に隣接して配置されるように、行が入れ替わります。
この動作によってタブの配置が常時変化し、UI における先見性が失われるため、ユーザーの感覚を狂わせる可能性があります。Metal の Look & Feel では、選択したタブがウィンドウ表示領域に隣接していない場合でも常に各行の位置を固定しておくことで、この問題を解決しました。
ただし、Metal による解決方法の欠点は、「タブ付きフォルダ」のメタファから視覚的に外れている (選択したタブがその内容に密着していない) ことです。実際、「Java Look and Feel Guidelines」の第 7 章では、複数行のタブが表示されるタブ付きペインの作成について、次のように勧めています。
「タブ付きペインに複数のタブ行が必要な場合は、その内容を複数のダイアログボックスまたはコンポーネントに分割できるかどうかを考慮してください。タブを複数行にすると、混乱が生じる可能性があります。」
タブ付きペインのタブの数を 1 行に収まるように制限することは重要な UI ガイドラインである一方で、タブの増殖は避けられないという状況もあります。しばしば、実行時にアプリケーションでタブを動的に作成するかどうかを判断するケースがあります (おそらくデータベースの内容によって)。
タブの増殖を処理する場合のもう 1 つの解決方法は、次のように、タブ付きペインのタブを単一行のスクロール可能なタブ行に制限することです。
この解決方法は本質的に、使い勝手についての問題がいくつかあります。その中でもっとも明らかな問題点は、すべての選択肢をユーザーが一度に見れないことです。ただし、このスクロール可能なタブはユーザーインタフェースでは一般的になりつつあり、そのため、Swing ではオプションとしてサポートするようになりました。
JTabbedPane
APIどのタブレイアウト動作が必要かをプログラムで定義できるように、JTabbedPane
に「tabLayoutPolicy」バインドプロパティーが提供されました。
public void setTabLayoutPolicy(int layoutPolicy) public boolean getTabLayoutPolicy()
さらに、サポートするポリシーに対応する定数が JTabbedPane
に追加されました。
public static final int WRAP_TAB_LAYOUT = 0; public static final int SCROLL_TAB_LAYOUT = 1;
tabLayoutPolicy
プロパティーのデフォルト値が以前のタブ付きペインのレイアウト動作と一致する WRAP_TAB_LAYOUT
なので、この機能は互換性に何の影響もありません。