我在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());
    }

最佳答案

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


  Component.getGraphics()根本无法工作。 Java使用回调
  绘制图形的机制。你不应该“推”
  使用getGraphics()将图形信息导入组件。相反,你
  应该等到Java调用您的paint()/ paintComponent()
  方法。那时您应该为Component提供
  您想做的图纸。
  
  该机制是必需的,因此Java可以支持图形系统,
  当窗口内容被遮盖时(例如被
  另一个窗口)。当窗口再次可见时,此类图形
  系统必须要求应用程序重建窗口内容。
  因此,paint()/ paintComponent()应该是
  零件。但是,getGraphics()没有任何回忆
  先前的绘图操作。因此,一旦通过getGraphics()完成绘制
  丢失,无法重建。那里什么都没有
  存储旧的图形数据,AWT / Swing中没有任何内容
  通知getGraphics()进行一些重绘。
  
  此外,在某些情况下,Component.getGraphics()只是
  返回null。这是该方法的定义行为。最后,
  大多数getGraphics()用户忘记处理Graphics对象
  使用后。


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

10-06 08:57