我们能以某个角度倾斜JPanel吗?

时间:2011-03-11 09:58:01

标签: java swing rotation jpanel

我在JPanel内有图像。我想旋转图像。是否可以使用JPanel旋转Graphics,图像可以旋转,只是出于好奇,是否可以旋转JPanel?

4 个答案:

答案 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 */之间的所有内容都会被轮换绘制。

(我没有测试代码,所以,它们可能是一些语法错误...)