Swing/QuadrantRotateIcon のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/QuadrantRotateIcon へ行く。
- 1 (2020-10-19 (月) 03:17:19)
- 2 (2020-10-19 (月) 16:58:34)
- 3 (2020-12-28 (月) 14:55:50)
- 4 (2023-06-16 (金) 08:18:09)
- category: swing folder: QuadrantRotateIcon title: Iconを指定した数の四分円だけ回転して表示する tags: [Icon, JLabel, AffineTransform] author: aterai pubdate: 2020-10-19T03:14:22+09:00 description: Iconを指定した数の四分円(90度)だけ回転してJLabelに配置します。 image: https://drive.google.com/uc?id=1pAW3bfWkPq_I3DJciSJtYVB31En8TJH3
概要
Iconを指定した数の四分円(90度)だけ回転してJLabelに配置します。
Screenshot
Advertisement
サンプルコード
enum QuadrantRotate {
CLOCKWISE(1),
HORIZONTAL_FLIP(2),
COUNTER_CLOCKWISE(-1);
private final int numquadrants;
QuadrantRotate(int numquadrants) {
this.numquadrants = numquadrants;
}
public int getNumQuadrants() {
return numquadrants;
}
}
class QuadrantRotateIcon implements Icon {
private final QuadrantRotate rotate;
private final Icon icon;
protected QuadrantRotateIcon(Icon icon, QuadrantRotate rotate) {
this.icon = icon;
this.rotate = rotate;
}
@Override public void paintIcon(Component c, Graphics g, int x, int y) {
int w = icon.getIconWidth();
int h = icon.getIconHeight();
Graphics2D g2 = (Graphics2D) g.create();
g2.translate(x, y);
switch (rotate) {
case CLOCKWISE:
g2.translate(h, 0);
break;
case HORIZONTAL_FLIP:
g2.translate(w, h);
break;
case COUNTER_CLOCKWISE:
g2.translate(0, w);
break;
default:
throw new AssertionError("Unknown QuadrantRotateIcon");
}
g2.transform(
AffineTransform.getQuadrantRotateInstance(rotate.getNumQuadrants()));
icon.paintIcon(c, g2, 0, 0);
g2.dispose();
}
@Override public int getIconWidth() {
return rotate == QuadrantRotate.HORIZONTAL_FLIP
? icon.getIconWidth() : icon.getIconHeight();
}
@Override public int getIconHeight() {
return rotate == QuadrantRotate.HORIZONTAL_FLIP
? icon.getIconHeight() : icon.getIconWidth();
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルではJava 1.6
で追加されたAffineTransform.getQuadrantRotateInstance(...)
メソッドを使用して90°
単位で回転したIcon
を作成しています。
参考リンク
- Iconを回転するからこちらに移動