java中的缩放不适用于(-1,1)或(1,-1)

java中的缩放不适用于(-1,1)或(1,-1),java,graphics,Java,Graphics,我试图简单地反映一下“好”这个词: 因此,我使用g2d按y轴缩放文本。缩放(1,-1)但不缩放 我正在使用以下简单代码: @SuppressWarnings("serial") public class C extends JPanel{ JFrame frame = new JFrame(); public C(){ frame.setSize(500,500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE

我试图简单地反映一下“好”这个词: 因此,我使用
g2d按y轴缩放文本。缩放(1,-1)
但不缩放

我正在使用以下简单代码:

@SuppressWarnings("serial")
public class C extends JPanel{

 JFrame frame = new JFrame();

 public C(){
     frame.setSize(500,500);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


     frame.add(this);
     frame.setVisible(true);
 }


 public void paintComponent(Graphics g){
     Graphics2D gr = (Graphics2D)g ;

     gr.setColor(Color.BLACK);
     gr.fillRect(0, 0,250, 250);


     gr.setColor(Color.YELLOW);
     gr.drawString("good",50,50);
     gr.scale(1,-1);
     gr.drawString("good",50,50);


 }

public static void main(String[] args){

    new C();
}

当我为值>0(例如+2)进行缩放时,缩放效果非常好。

坐标系被缩放的负值改变,因此在y=50处绘制实际上是在y=-50处绘制。你可以

  • 在适当位置绘制文本,考虑负比例因子,例如gr.drawString(“良好”,50,-50)
  • 在绘制字符串之前调用translate to(例如
    gr.translate(0,-100)
  • 无论哪种方式,考虑不改变图形变换,而是使用外部变换并重置图形变换之后

    AffineTransform previous = gr.getTransform();
    AffineTransform newTransform = new AffineTransform(previous);
    newTransform.scale(0,-1);
    gr.setTransform(newTransform);
    
    gr.setTransform(previous);