JTabbedPane -スクロール可能なタブ

以前にJTabbedPaneを使用すると、すべてのタブが1行に収まらない場合、JTabbedPaneで複数の行になるように行が折り返されました。このような表示方法の代わりに、JTabbedPaneに代替スキームを提供して、タブを単一のスクロール可能な行に設定できるようにしてほしいという多くの要求がありました。このドキュメントでは、1.4リリースのJTabbedPaneでサポートされる、スクロール可能なタブを提供する新規APIについて説明します。この変更に関連するバグ追跡レポート: 4093898

タブが多すぎるジレンマ

タブが複数行に折り返される場合は、ユーザーが一度にすべてのタブを見ることができるという長所があります。

タブが2行のグラフィック。1行目に5つ、2行目に4つのタブがある。

ただし、複数行になった場合の問題は、ウィンドウの表示領域に隣接していない行のタブをユーザーが選択したときの処理で発生します。WindowsおよびMotifのルック・アンド・フィール実装では、このアクションで、選択したタブを含む行がウィンドウ表示領域に隣接して配置されるように、行が入れ替わります。

選択したタブがパネル表示領域に隣接したグラフィック

この動作によってタブの配置が常時変化し、UIにおける先見性が失われるため、ユーザーの感覚を狂わせる可能性があります。Metalのルック・アンド・フィールでは、選択したタブがウィンドウ表示領域に隣接していない場合でも常に各行の位置を固定しておくことで、この問題を解決しました。

選択したタブを色を変えて表示したグラフィック

ただし、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なので、この機能は互換性に何の影響もありません。


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.