Swing/Gradient のバックアップの現在との差分(No.15)
TITLE:Separatorのグラデーション
Separatorのグラデーション
Posted by terai at 2004-03-29- category: swing folder: Gradient title: Separatorのグラデーション tags: [JSeparator, GradientPaint, UIManager] author: aterai pubdate: 2004-03-29T04:50:14+09:00 description: GradientPaintを使ったグラデーションで、徐々に背景色に溶け込んでいくJSeparatorを作成します。 image:
概要
GradientPaint
を使ったグラデーションで、徐々に背景色に溶け込んでいくJSeparator
を作成します。
Screenshot
Advertisement
概要
グラデーションするセパレータを作ってみます。サンプルコード
#spanend
#spanadd
class GradientSeparatorUI extends BasicSeparatorUI {
#spanend
private Color bgc, ssc, shc;
-&jnlp;
-&jar;
-&zip;
#spandel
#spanend
#spandel
#screenshot
#spanend
#spandel
#spanend
#spandel
**サンプルコード [#z73fe6d9]
#spanend
#spandel
#code{{
#spanend
#spandel
class GradientSeparatorUI extends BasicSeparatorUI{
#spanend
public static ComponentUI createUI( JComponent c ) {
public static ComponentUI createUI(JComponent c) {
return new GradientSeparatorUI();
}
private Color bgc,ssc,shc;
#spanadd
#spanend
private void updateColors(JComponent j) {
Color c = UIManager.getColor("Panel.background");
bgc = (c instanceof ColorUIResource)? c:j.getBackground();
bgc = c instanceof ColorUIResource ? c : j.getBackground();
c = UIManager.getColor("Separator.shadow");
ssc = (c instanceof ColorUIResource)? c:j.getBackground().brighter();
ssc = c instanceof ColorUIResource ? c : j.getBackground().brighter();
c = UIManager.getColor("Separator.highlight");
shc = (c instanceof ColorUIResource)? c:j.getBackground().darker();
shc = c instanceof ColorUIResource ? c : j.getBackground().darker();
}
@Override
public void installUI(JComponent c) {
#spanadd
#spanend
@Override public void installUI(JComponent c) {
super.installUI(c);
updateColors(c);
}
@Override
public void paint(Graphics g, JComponent c) {
Graphics2D g2 = (Graphics2D)g;
Dimension s = c.getSize();
if(((JSeparator)c).getOrientation()==JSeparator.VERTICAL) {
g2.setPaint(new GradientPaint(0, 0, ssc, 0, s.height, bgc, true));
g2.fillRect(0, 0, 1, s.height);
g2.setPaint(new GradientPaint(0, 0, shc, 0, s.height, bgc, true));
g2.fillRect(1, 0, 1, s.height);
}else{
g2.setPaint(new GradientPaint(0, 0, ssc, s.width, 0, bgc, true));
g2.fillRect(0, 0, s.width, 1);
g2.setPaint(new GradientPaint(0, 0, shc, s.width, 0, bgc, true));
g2.fillRect(0, 1, s.width, 1);
#spanadd
#spanend
@Override public void paint(Graphics g, JComponent c) {
if (c instanceof JSeparator) {
Graphics2D g2 = (Graphics2D) g.create();
Dimension s = c.getSize();
JSeparator js = (JSeparator) c;
if (js.getOrientation() == JSeparator.VERTICAL) {
g2.setPaint(new GradientPaint(0, 0, ssc, 0, s.height, bgc, true));
g2.fillRect(0, 0, 1, s.height);
g2.setPaint(new GradientPaint(0, 0, shc, 0, s.height, bgc, true));
g2.fillRect(1, 0, 1, s.height);
} else {
g2.setPaint(new GradientPaint(0, 0, ssc, s.width, 0, bgc, true));
g2.fillRect(0, 0, s.width, 1);
g2.setPaint(new GradientPaint(0, 0, shc, s.width, 0, bgc, true));
g2.fillRect(0, 1, s.width, 1);
}
g2.dispose();
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは下のJSeparatorの描画にGradientPaintを使用し、グラデーションさせています。解説
- 上、左:
- デフォルトの
JSeparator
- デフォルトの
- 下、右:
-
BasicSeparatorUI
を継承するGradientSeparatorUI
をJSeparator
に設定して元色から親パネルの背景色へとグラデーションするGradientPaint
で直線を描画 -
JSeparator
にBorder
を設定するとJSeparator
が表示されない
-
参考リンク
コメント
- JSeparator.VERTICAL に対応。 -- terai
コメント
-
JSeparator.VERTICAL
に対応。 -- aterai