Swing/DisableMetalBumps のバックアップの現在との差分(No.1)
- category: swing folder: DisableMetalBumps title: MetalLookAndFeelのJInternalFrameタイトルバーでBumpsを非表示にする tags: [JInternalFrame, MetalLookAndFeel, LookAndFeel] author: aterai pubdate: 2017-07-24T15:44:08+09:00 description: MetalLookAndFeelのJInternalFrameでBumpsを非表示にし、フラットなタイトルバーに変更します。 image: https://drive.google.com/uc?export=view&id=1Iy8Oe01o_AOQbIeiuE_pEjfkegKcJuPexQ image: https://drive.google.com/uc?id=1Iy8Oe01o_AOQbIeiuE_pEjfkegKcJuPexQ
概要
MetalLookAndFeel
のJInternalFrame
でBumps
を非表示にし、フラットなタイトルバーに変更します。
Screenshot
Advertisement
Screenshot
Advertisement
サンプルコード
JInternalFrame f1 = new JInternalFrame("basic", true, true, true, true) {
@Override public void updateUI() {
super.updateUI();
setUI(new BasicInternalFrameUI(this) {
@Override protected JComponent createNorthPane(JInternalFrame w) {
return new BumpsFreeInternalFrameTitlePane(w);
}
});
}
};
#spandel
//...
#spanend
#spanadd
// ...
#spanend
class BumpsFreeInternalFrameTitlePane extends BasicInternalFrameTitlePane {
protected BumpsFreeInternalFrameTitlePane(JInternalFrame w) {
super(w);
setBorder(BorderFactory.createMatteBorder(
0, 0, 1, 0, MetalLookAndFeel.getPrimaryControlDarkShadow()));
}
#spanadd
#spanend
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.height = 24;
return d;
}
#spanadd
#spanend
@Override public void createButtons() {
super.createButtons();
Arrays.asList(closeButton, maxButton, iconButton).forEach(b -> {
b.setContentAreaFilled(false);
b.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
});
}
}
View in GitHub: Java, Kotlin解説
-
metal(default)
- デフォルトの
MetalLookAndFeel
- デフォルトの
-
basic
-
MetalBumps
クラスはパッケージプライベートなので非表示にするのが難しい - 代わりに
BasicInternalFrameTitlePane
にMetalInternalFrameTitlePane
のボタンアイコンや縁などを設定してフラットなタイトルパーを作成
-
-
Metal(default)
- デフォルトの
MetalLookAndFeel
ではJInternalFrame
のタイトルバーに滑り止め風の凸凹模様(Bumps
)が描画される
- デフォルトの
-
Basic
-
MetalBumps
クラスはパッケージプライベートなので外部から一部の色などを変更して非表示にするのが難しい - 代わりに
BasicInternalFrameTitlePane
にMetalInternalFrameTitlePane
のボタンアイコンや縁などを設定してフラットでシンプルな描画のタイトルバーを作成- タイトルバーの高さを
BasicInternalFrameTitlePane#getPreferredSize()
メソッドをオーバーライドして設定 - 閉じるボタンなどの余白設定が効かない?
- フォーカスが無い場合の縁色に未対応
- 閉じるボタンなどの余白設定が無効?
- フォーカスが無い場合の縁色変更に未対応
- タイトルバーの高さを
-