我在JPanel
内有图像。我想旋转图像。是否可以使用JPanel
旋转Graphics
,图像可以旋转,只是出于好奇,是否可以旋转JPanel?
答案 0 :(得分:2)
是的!这是可能的,而且相当简单。我还没有完成旋转,但我在项目上非常成功地完成了其他仿射变换(在整个GUI上下调整)。我不明白为什么轮换应该有所不同。
您可以在Graphics对象上设置转换,而不是尝试扩展每个组件。由于这是在呈现的所有组件之间共享,因此您可以“免费”立即转换所有内容。重要的是要认识到转换只是一个渲染过程步骤......即所有组件仍然认为它们具有你在未转换世界中给出它们的界限(位置+大小)。这使我们面临着正确处理鼠标事件的挑战。为此,您只需在主面板前添加一个玻璃窗格。此窗格收集所有鼠标事件并对事件应用转换的反向,然后将事件向前发送到所有其他组件。
从概念上讲很简单!尽管如此,我还是记得为了让它变得清脆而需要进行一些调整。尤其是java中的渲染文本(字体)未正确地线性缩放(它在与字体大小相对应的离散步骤中缩放)这一事实在我的缩放仿射变换案例中构成了最后的挑战。如果你只是旋转,也许你不必担心。
我从JXTransformer获得灵感:http://www.java.net/blog/alexfromsun/archive/2006/07/jxtransformer_t.html
答案 1 :(得分:1)
据我所知,您无法旋转JPanel本身,但您可以使用Java2D在JPanel内旋转图像。 Here这篇文章可能有所帮助。
编辑:
如果覆盖其paintXxx方法并使用AffineTransform,实际上可能有一种方法可以旋转JComponents(例如JPanel)。
答案 2 :(得分:0)
旋转JPanel本身是不可能的,但是当然可以旋转任何图像。有很多方法可以做到这一点,例如,您可以覆盖JPanel的public void paint(Graphics g)
,然后将Graphics
投射到Graphics2D
。它是非常有用的类,旋转等等;)检查api文档以获取有关此文档的更多信息。
答案 3 :(得分:0)
是的,有可能。但是你不会旋转面板,而是图像:
public void paintComponent(Graphics gg)
{
Graphics2D g = (Graphics2D) gg;
g.setRenderingHint(RenderingHints.KEY_ANTI_ALIAS, RenderingHints.VALUE_ANTI_ALIAS_ON);
AfflineTransform matrix = g.getTransform(); // Backup
float angle = Math.PI / 4.0f; // 45°
g.rotate(angle);
/* Begin */
g.drawImage(yourImage, [your coordinates], null);
/* End */
g.setTranform(matrix); // Restore
}
/* Begin */
和/* End */
之间的所有内容都会被轮换绘制。
(我没有测试代码,所以,它们可能是一些语法错误...)