Swing/WavyLineSeparator のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/WavyLineSeparator へ行く。
- 1 (2006-06-01 (木) 09:28:20)
- 2 (2006-06-19 (月) 06:28:53)
- 3 (2006-06-19 (月) 14:39:12)
- 4 (2006-06-21 (水) 18:42:49)
- 5 (2006-06-22 (木) 18:04:41)
- 6 (2007-01-11 (木) 12:11:35)
- 7 (2007-03-14 (水) 11:31:49)
- 8 (2007-03-28 (水) 18:43:22)
- 9 (2007-10-16 (火) 15:56:39)
- 10 (2009-11-05 (木) 18:24:47)
- 11 (2010-11-15 (月) 14:55:16)
- 12 (2013-02-28 (木) 14:33:31)
- 13 (2014-11-18 (火) 16:09:46)
- 14 (2014-12-01 (月) 17:26:21)
- 15 (2016-01-29 (金) 14:02:05)
- 16 (2017-06-30 (金) 13:52:10)
- 17 (2018-06-01 (金) 14:42:37)
- 18 (2020-05-30 (土) 01:08:58)
- 19 (2021-11-12 (金) 13:56:05)
TITLE:Separatorを波線で表示
Posted by terai at 2006-06-19
Separatorを波線で表示
波線を使ったSeparatorを作成します。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
class WavyLineSeparator extends JSeparator{
private final static int ICONWIDTH = 3;
private final Icon tileIcon;
public WavyLineSeparator() {
this(SwingConstants.HORIZONTAL);
}
public WavyLineSeparator(int orientation) {
super(orientation);
tileIcon = new WavyLineIcon();
if(orientation==SwingConstants.HORIZONTAL) {
setBorder(BorderFactory.createEmptyBorder(2,1,2,1));
int w = ICONWIDTH+getInsets().top+getInsets().bottom;
setPreferredSize(new Dimension(100, w));
setMinimumSize(new Dimension(0, w));
setMaximumSize(new Dimension(Integer.MAX_VALUE, w));
}else{
setBorder(BorderFactory.createEmptyBorder(1,2,1,2));
int w = ICONWIDTH+getInsets().left+getInsets().right;
setPreferredSize(new Dimension(w, 30));
setMinimumSize(new Dimension(w, 0));
setMaximumSize(new Dimension(w, Integer.MAX_VALUE));
}
}
@Override
public void paintComponent(Graphics g) {
//super.paintComponent(g);
int xpos, ypos;
int tileW = tileIcon.getIconWidth();
int tileH = tileIcon.getIconHeight();
Insets i = getInsets();
if(getOrientation()==SwingConstants.HORIZONTAL) {
for(xpos = i.left; getWidth() - xpos > 0; xpos += tileW) {
tileIcon.paintIcon(this, g, xpos, i.top);
}
}else{
for(ypos = i.top; getHeight() - ypos > 0; ypos += tileH) {
tileIcon.paintIcon(this, g, i.left, ypos);
}
}
}
class WavyLineIcon implements Icon {
private final Color sfc = UIManager.getColor("Separator.foreground");
@Override public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D)g;
AffineTransform oldTransform = g2.getTransform();
g2.setPaint(sfc);
if(getOrientation()==SwingConstants.VERTICAL) {
g2.translate(x+getIconWidth(), y);
g2.rotate(Math.PI/2);
}else{
g2.translate(x,y);
}
g2.drawLine( 0, 2, 0, 2 );
g2.drawLine( 1, 1, 1, 1 );
g2.drawLine( 2, 0, 3, 0 );
g2.drawLine( 4, 1, 4, 1 );
g2.drawLine( 5, 2, 5, 2 );
g2.setTransform(oldTransform);
}
@Override public int getIconWidth() {
return (getOrientation()==SwingConstants.HORIZONTAL)?
ICONWIDTH*2:ICONWIDTH;
}
@Override public int getIconHeight() {
return (getOrientation()==SwingConstants.HORIZONTAL)?
ICONWIDTH:ICONWIDTH*2;
}
}
}
解説
水平用の波パターンIconを作成して、これを順番に並べてセパレータとして描画しています。垂直用のパターンは水平用を回転して生成しています。
コメント
- SwingConstants.VERTICAL に対応しました。 -- terai