当前位置: 代码迷 >> J2SE >> java icon的操作,求!
  详细解决方案

java icon的操作,求!

热度:98   发布时间:2016-04-24 00:52:03.0
java icon的操作,求高手指点!!!
定义了一个Icon icon=new ImageIcon( "src/test.jpg "); 
想着把icon用在Label上,用之前想把icon翻转90度,能不能实现?
很着急、、、

------解决方案--------------------
有个类叫 IconUIResource
可以直接复用现有的 Icon ,然后根据不同角度,旋转坐标系,然后调用 Icon 的绘制函数
得自己去实现一个定制的IconUIResource
------解决方案--------------------
Java code
@SuppressWarnings("serial")class RotateIcon extends IconUIResource {    private int degree;    public RotateIcon(Icon icon, int degree) {        super(icon);        this.degree = degree;    }    @Override    public void paintIcon(Component c, Graphics g, int x, int y) {        Graphics2D g2d = (Graphics2D) g;        // 获取当前的坐标系状态        AffineTransform atf = g2d.getTransform();        AffineTransform clone = (AffineTransform) atf.clone();        // 以原始Icon的中心点为中心进行坐标系旋转        atf.rotate(Math.PI / 180 * degree, x + getIconWidth() / 2, y + getIconHeight() / 2);        g2d.setTransform(atf);        // 绘制        super.paintIcon(c, g, x, y);        // 重置坐标系        g2d.setTransform(clone);    }}
------解决方案--------------------
测试代码
Java code
public class IconTest {    /**     * @param args     */    public static void main(String[] args) throws Exception {        ImageIcon icon = new ImageIcon(ImageIO.read(new File("icon.jpg")));        JFrame frame = new JFrame();        BorderLayout layout = new BorderLayout();        Container container = frame.getRootPane();        container.setLayout(layout);        container.add(new JButton(new RotateIcon(icon, 0)), BorderLayout.SOUTH);        container.add(new JButton(new RotateIcon(icon, 90)), BorderLayout.WEST);        container.add(new JButton(new RotateIcon(icon, 180)), BorderLayout.NORTH);        container.add(new JButton(new RotateIcon(icon, 270)), BorderLayout.EAST);        frame.pack();        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);    }}
------解决方案--------------------
绘图完成后,你可以得到一个Image 吧
把这个Image生成 ImageIcon,然后再使用上面的RotateIcon包装,分别传入不同的旋转参数,设置到其它格子里

或者

自定义一个Image组件,根据坐标转换参数,执行对Image不同的绘制操作.
在九宫格的其它格子里,分别填上这个组件,并设置不同的坐标转换参数
------解决方案--------------------
如果你愿意,甚至可以给你的绘图部分加上监听,在绘制内容更改时,随时反映到其它格子里。而不是点一个按钮才可以看到
  相关解决方案