2011-03-11 45 views

回答

0

无法旋转JPanel本身,但它可以旋转里面的任何图像。有很多方法可以做到这一点,例如,您可以覆盖JPanel的public void paint(Graphics g),然后将Graphics转换为Graphics2D。这是非常有用的类,做旋转和更多;)检查API文档关于这一个的更多信息。

1

据我所知你不能旋转JPanel本身,但你可能能够使用Java2D旋转JPanel内的图像。 Here是一篇可能有帮助的文章。

编辑:

有可能实际上是如果重写他们的paintXxx方法和使用AffineTransform旋转JComponents(如JPanel中)的方法。

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 

} 

一切和/* End */之间/* Begin */将绘制旋转。

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

2

是的!这可能也相当简单。我还没有完成旋转,但我已经完成了其他仿射变换(在整个项目中非常成功地缩放了整个GUI)。我不明白为什么轮换应该有任何不同。

不是试图缩放每个组件,而是使用可以在Graphics对象上设置转换的事实。由于这是所有呈现的组件之间共享的,所以你可以立即“免费”转换所有东西。认识到转换只是一个渲染过程步骤是非常重要的......即所有组件仍然相信它们具有在未转换的世界中给予它们的界限(位置+大小)。这给我们带来了正确处理鼠标事件的挑战。要做到这一点,只需在主面板前添加一个玻璃面板即可。此窗格收集所有鼠标事件,并在事件上应用变换的反向,然后将事件向前发送到所有其他组件。

从概念上讲非常简单!尽管如此,我还记得它做了一些调整,尽管它很清脆。特别是在java中呈现的文本(字体)没有正确线性缩放(它以与字体大小相对应的离散步骤进行缩放)这一事实在我的尺度仿射变换情况下造成了最后的挑战。如果你只是旋转,也许你不必担心。

我从JXTransformer得到了灵感:http://www.java.net/blog/alexfromsun/archive/2006/07/jxtransformer_t.html