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