TITLE:Separatorのグラデーション

Separatorのグラデーション

Posted by terai at 2004-03-29

概要

グラデーションするセパレータを作ってみます。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

class GradientSeparatorUI extends BasicSeparatorUI{
  public static ComponentUI createUI( JComponent c ) {
    return new GradientSeparatorUI();
  }
  private Color bgc,ssc,shc;
  private void updateColors(JComponent j) {
    Color c = UIManager.getColor("Panel.background");
    bgc = (c instanceof ColorUIResource)? c:j.getBackground();
    c = UIManager.getColor("Separator.shadow");
    ssc = (c instanceof ColorUIResource)? c:j.getBackground().brighter();
    c = UIManager.getColor("Separator.highlight");
    shc = (c instanceof ColorUIResource)? c:j.getBackground().darker();
  }
  @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);
    }
  }
}

解説

上記のサンプルでは下のJSeparatorの描画にGradientPaintを使用し、グラデーションさせています。

JSeparatorにsetBorder()すると、セパレータが見えなくなる場合があるのですこし注意が必要です。

コメント

  • JSeparator.VERTICAL に対応。 -- terai