2012-06-08 261 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