2012-06-08 208 views
0

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

主类:

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()); 
    } 
+2

*“是不值得发布” *导致感觉“不值得回答”。 –

+1

“甚至不值得发布”,意思是说他们已经很好了...... –

+1

所以你基本上决定不发布任何相关的代码,并问我们如何做到这一点。所以我错过了一些重要信息:我需要将我的发票寄给哪里? – Robin

回答

2

你应该永远使用Component.getGraphics()的一个组件上绘图。相反,您应该总是覆盖paintComponent并使用传递给它的Graphics对象。

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

这种机制是必要的,因此Java可以支持图形系统,其中 在被遮挡时不记得窗口内容(例如被另一个窗口覆盖 )。当窗口再次可见时,这些图形系统必须要求应用程序重新构建窗口内容。 因此,paint()/ paintComponent()应该是 组件的内存。但是,getGraphics()并没有任何回忆以前的绘图操作。因此,一旦通过getGraphics() 完成的绘图丢失,就无法重建。 中没有任何内容存储旧的绘图数据,并且AWT/Swing中没有任何内容 通知getGraphics()做一些重绘。

另外,有些情况下Component.getGraphics()只是 返回null。这是该方法的已定义行为。最后,大多数getGraphics()用户在使用后忘记配置图形对象 。

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