- PR -

ラベルやボタンの回転

1
投稿者投稿内容
CameField
会議室デビュー日: 2004/09/20
投稿数: 11
投稿日時: 2005-08-29 17:27
AffineTransformを用いることで,画像を回転させることができることができますよね.
しかし,画像そのものを回転させるのではなく,その画像を貼り付けた
ラベルやボタンを回転させたいと思っています.
90度毎の回転であれば,画像を回転させてそれをラベルやボタンに貼り付けることで
対応できたのですが,自由に回転させたいために,それができません.
そこで,画像を貼り付けたラベルやボタンを回転させたいのです.
そのようなことは可能なのでしょうか.
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-08-29 21:13
WebであればIE限定ですが、cssのMatrix Filterを利用して自由にボタンやラベルなどのコンポーネントを回転させることができます。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-08-30 14:02
すみません、直接の回答ではありません。

UIをがしがしと自作すれば可能でしょうけど、面倒ですね。

「窓立て2」というツールがありますが、これは倒した状態では操作できないようですね。
http://www.ksky.ne.jp/~seahorse/mtate2/

私が今「作って」と言われたら、コンポーネントを配置したかのような「画像」を傾けて、その画像上の座標の「どこをクリックされたか」などでイベントを発生させて、あたかも「コンポーネントがそこに配置されているかのように」振る舞わせますね。

Windows Vista(Longhorn)ではOS自体にこういう機能がつくという話ですが、Javaでも使えるようになるといいですね。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2005-08-31 10:41
こんにちは、さくらばです。

引用:

CameFieldさんの書き込み (2005-08-29 17:27) より:
そこで,画像を貼り付けたラベルやボタンを回転させたいのです.
そのようなことは可能なのでしょうか.



完全じゃないけど、参考にしてください。

コード:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

import javax.swing.JButton;
import javax.swing.JFrame;

public class RotateButton extends JButton {
    private BufferedImage image;
    private AffineTransform trans;
    private Dimension size = new Dimension(0, 0);

    private double angle = Math.PI / 12.0;

    public RotateButton(String text) {
        super(text);
    }

    public void paint(Graphics g) {
        Dimension newSize = getSize();
        if (image == null || !size.equals(getSize())) {
            System.out.println(getSize());
            size = newSize;
            int r = (int)Math.sqrt(size.getWidth() * size.getWidth()
                                   + size.getHeight() * size.getHeight());

            image = new BufferedImage(r, r, BufferedImage.TYPE_INT_ARGB);
            
            trans = AffineTransform.getRotateInstance(angle,
                                                      size.getWidth()/2.0, 
                                                      size.getHeight()/2.0);
        }

        Graphics2D g2 = (Graphics2D)image.getGraphics();
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                            RenderingHints.VALUE_ANTIALIAS_ON);

        g2.transform(trans);
        super.paint(g2);
        g2.dispose();

        g.drawImage(image, 0, 0, null);
    }

    public static void main(String[] args) {
        RotateButton button = new RotateButton("Button");
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new FlowLayout());
        frame.add(button);

        frame.setBounds(100, 100, 200, 100);
        frame.setVisible(true);
    }
}



1

スキルアップ/キャリアアップ(JOB@IT)