java中的比例不适用于(-1,1)或(1,-1)

时间:2015-06-04 19:07:13

标签: java graphics

我试图简单地反映“好”这个词: 所以我使用g2d.scale(1,-1)但是没有任何东西按y轴缩放文本。

我正在使用这个简单的代码:

@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时,缩放比例工作正常。

1 个答案:

答案 0 :(得分:1)

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

  1. 在适当的位置绘制文本,同时考虑负比例因子,例如gr.drawString(" good",50,-50);
  2. 在绘制字符串之前调用以转换为(例如gr.translate(0,-100)
  3. 无论哪种方式,考虑不改变图形变换,但使用外部变换并随后重置图形变换

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