JTabbedPane を使用して、タブを重ねる必要があるデザインを実装したいと考えています (ここにある画像に示されています: http://imm.io/YAZ )。
正確にはロケット科学ではありませんが、解決策を見つけることができないようです (大規模なグーグル検索の後でも)。
これは JTabbedPane を使用して (おそらく PLAF 経由で) 可能ですか、それともカスタム コンポーネントを作成する必要がありますか?
ありがとう
トーマス
JTabbedPane を使用して、タブを重ねる必要があるデザインを実装したいと考えています (ここにある画像に示されています: http://imm.io/YAZ )。
正確にはロケット科学ではありませんが、解決策を見つけることができないようです (大規模なグーグル検索の後でも)。
これは JTabbedPane を使用して (おそらく PLAF 経由で) 可能ですか、それともカスタム コンポーネントを作成する必要がありますか?
ありがとう
トーマス
私の知る限り、カスタム コンポーネントが必要です。JTabbedPane を拡張し、新しいタイプのタブを挿入することで実現できると思います。
オーバーラップさせる方法は、選択したタブの paintComponent メソッドを最後に呼び出すことです。つまり、ビューの前面に最も近くなります。
オーバーラップするタブ クラスに関しては、ほとんどすべての JComponent サブクラスをコードに利用できます。背景として透明な PNG を使用してテーマを設定し、タブ自体で public void setOpaque(boolean isOpaque) を呼び出すこともできます。
カスタム UI 実装で paintTab をオーバーライドし、前のタブの一部を次のタブの上にペイントすることで、この問題を解決しました。これが可能になったのは、paintTab を使用すると、現在ペイントしているタブの境界だけでなく、タブ領域全体をペイントできるためです。例、タブ A、B、C がある場合:
タブ A は、左の境界線と中央の塗りつぶしをペイントします。タブ B は左の境界線、中央の塗りつぶし、タブ A の右の境界線を塗りつぶします。タブ C は、左の境界線、中央の塗りつぶし、タブ B の右の境界線、そしてそれ自体の右の境界線を描画します (これはペインの最後のタブであるため)。
次に、選択したタブを少し異なる方法で処理します。
上記のソリューションは実装が難しくなく、非常にうまく機能します。