2016-03-17 42 views
0

我創建了一個類,它是一個「鏡像」對象。類構造函數具有鏡像座標和方向。在這個類中還有一個paintComponent方法。我試圖在我的框架中創建一個具有此類的鏡像對象,並自動繪製具有座標和方向的鏡像。有「鏡子」類。我可以這樣做嗎?使用paintComponent在JFrame中鏡像對象

import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.ImageIcon; 
import javax.swing.JComponent; 

@SuppressWarnings("serial") 
    class Mirror extends JComponent{ 

     public static int xm, ym; 
     public static boolean direction; 

     public Mirror(int xmm, int ymm, boolean directionm){ 

      xm=xmm; 
      ym=ymm; 
      direction=directionm;; 
      repaint(); 
     } 

     public int getX(){ 
      return xm; 
     } 

     public int getY(){ 
      return ym; 
     } 

     public boolean getDirection(){ 
      return direction; 
     } 

     public int getIntDirection(){ 
      int a; 

      if(direction==true){ 
       a=1; 
      }else{ 
       a=0; 
      } 

      return a; 
     } 

     public void setDirection(boolean status){ 
      direction=status; 
     } 

     @Override 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 

      switch(getIntDirection()){ 
      case 0: ImageIcon mirrorr = new ImageIcon("imagess/mirrorrigt.jpg"); 
        Image mirrorrImage = mirrorr.getImage(); 
        g.drawImage(mirrorrImage,xm,ym,null); 
        break; 
      case 1: ImageIcon mirrorl = new ImageIcon("imagess/mirrorleft.jpg"); 
        Image mirrorlImage = mirrorl.getImage(); 
        g.drawImage(mirrorlImage,xm,ym,null); 
        break; 
      } 
     } 
    } 
+1

你覆蓋'getX'和'getY'不知道這些方法提供什麼樣的功能。您也不應該從'paintComponent'方法中加載資源(如圖像) – MadProgrammer

+1

投票重新打開,因爲_mirror_內容的意圖看起來很清晰;隨着您的理解發展,請隨時編輯或引用此問題。 – trashgod

回答

4

如圖here,可以顛倒通過施加合適的AffineTransform到圖形上下文相對於渲染的軸線。在example中,您可以向左側應用scale(1.0, 1.0),向右側應用scale(-1.0, 1.0)以獲得鏡像效果。

image

Box box = new Box(BoxLayout.X_AXIS); 
BufferedImage image = ImageIO.read(
    new URL("http://sstatic.net/stackoverflow/img/logo.png")); 
AffineTransform xfrm1 = new AffineTransform(); 
xfrm1.scale(1, 1); 
box.add(new ImageView(image, xfrm1)); 
AffineTransform xfrm2 = new AffineTransform(); 
xfrm2.scale(-1, 1); 
box.add(new ImageView(image, xfrm2)); 
+0

謝謝您的回答:) –

+0

歡迎您光臨;單擊並拖動面板以查看效果。 – trashgod

相關問題