旋转JLabel 90度Java

时间:2012-06-08 15:31:20

标签: java swing rotation jlabel imageicon

我在Jlabel中有一个图像,我想在用户按下按钮时向右旋转90度。我自己尝试过,但有各种错误。我被告知最好的方法是使用Graphics2D?

主类:

private void SearchButtonActionPerformed(java.awt.event.ActionEvent evt) {        
BufferedImage image;
        try {
            image = ImageIO.read(file);
            Image scaled = image.getScaledInstance(Jlabel1.getWidth(), Jlabel1.getHeight(), 5);
            Jlabel1.setIcon(new ImageIcon(scaled));

按钮:

 private void rotateButtonActionPerformed(java.awt.event.ActionEvent evt) {
        Graphics2D userImage = (Graphics2D)JLabel1.getGraphics();
    userImage.rotate(Math.toRadians(90));
    userImage.drawImage(JLabel1, JLabel1.getHeight(), JLabel1.getWidth());
    }

1 个答案:

答案 0 :(得分:2)

您永远不应该使用Component.getGraphics()来绘制组件。相反,您应该始终覆盖paintComponent并使用传递给它的Graphics对象。

  

Component.getGraphics()根本无法工作。 Java使用回调   绘制图形的机制。你不应该“推”   使用getGraphics()将图形信息转换为组件。相反,你   应该等到Java调用你的paint()/ paintComponent()   方法。那时你应该提供组件   你想做的图纸。

     

这种机制是必要的,因此Java可以支持哪些图形系统   当窗口内容被遮挡时(例如,被覆盖的窗口内容)不记得窗口内容   另一个窗口)。当窗口再次可见时,这样的图形   系统必须要求应用程序重建窗口内容。   因此,paint()/ paintComponent()应该是a的记忆   零件。然而,getGraphics()没有任何回忆   以前的绘图操作。所以一旦通过getGraphics()完成绘图   失去了,它无法重建。那里什么都没有   存储旧的绘图数据,AWT / Swing中没有任何内容   通知getGraphics()做一些重绘。

     

此外,还有一些情况下Component.getGraphics()   返回null。这是该方法的已定义行为。最后,   大多数getGraphics()用户忘记处理Graphics对象   使用后。

http://www.pscode.org/guifaq.html