JTabbedPaneのタブ・ランの回転を無効にする
Total: 2026
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JTabbedPane
で複数のランにタブをラップする場合でもタブ選択によるランの回転を無効にします。
Screenshot
Advertisement
サンプルコード
UIManager.put("TabbedPane.tabRunOverlay", 0);
UIManager.put("TabbedPane.selectedLabelShift", 0);
UIManager.put("TabbedPane.labelShift", 0);
UIManager.put("TabbedPane.selectedTabPadInsets", new Insets(0, 0, 0, 0));
JTabbedPane tabbedPane = new JTabbedPane() {
@Override public void updateUI() {
super.updateUI();
setUI(new WindowsTabbedPaneUI() {
@Override protected boolean shouldRotateTabRuns(int tabPlacement) {
return false;
}
});
}
};
View in GitHub: Java, Kotlin解説
- 上:
Default
MetalLookAndFeel
以外のLookAndFeel
ではJTabbedPane
レイアウトがWRAP_TAB_LAYOUT
で複数のランにタブをラップするレイアウトモードの場合、選択されたタブがタブコンテンツに接地するようランの回転が発生するMetalLookAndFeel
の場合、MetalTabbedPaneUI.TabbedPaneLayout#rotateTabRuns(int tabPlacement, int selectedRun)
メソッドがオーバーライドされて空(なにも実行しない)になっているため、タブ・ランの回転は発生しないMetalTabbedPaneUI#shouldRotateTabRuns(int tabPlacement, int selectedRun)
が常にfalse
を返すよう設定されているが引数が2
つあるこのメソッドは他では全く使用されておらず、BasicTabbedPaneUI#shouldRotateTabRuns(int tabPlacement)
メソッドがオーバーライドされていないので無意味- 少なくとも
Java 5
以前から存在するコピペミスのバグ?かも(@Override
が使用可能なら発覚していたはず)
- 少なくとも
- 下:
Override BasicTabbedPaneUI#shouldRotateTabRuns(...)
BasicTabbedPaneUI#shouldRotateTabRuns(int tabPlacement)
メソッドをオーバーライドして常にfalse
を返すよう設定してタブ・ランの回転を無効化UIManager.put("TabbedPane.tabRunOverlay", 0);
を設定してタブ・ランの重なりを除去UIManager.put("TabbedPane.labelShift", 0);
とUIManager.put("TabbedPane.selectedLabelShift", 0);
を設定してタブテキストのシフトを無効化UIManager.put("TabbedPane.selectedTabPadInsets", new Insets(0, 0, 0, 0));
を設定して選択タブのサイズ拡張を無効化
参考リンク
- BasicTabbedPaneUI#shouldRotateTabRuns(int) (Java Platform SE 8)
- JTabbedPaneのタブのテキストシフト量を変更する
- [JDK-6855659] Ability to disable tab run rotation - Java Bug System