AffineTransform problem.

grinx

Grünschnabel
Hallo.
Ich habe ein problem mit AffineTransform.
In diesem Code wird mittels AffineTransform ein neues Rechteck an einer neuen Stelle erstellt.
Ich versuche AF gerade zu verstehen und komme nun mit der Syntax nicht klar.
Wenn ich getTranslateInstance durch getScaleInstance ändere bekomme ich kein neues rechteck. Wieso nicht? Kann mir jemand den code so abändern das scale funktioniert.
Code:
Rectangle2D.Double rechteck = new Rectangle2D.Double(210.0,210.0,80.0,60.0);
	Graphics2D g2d;	
		public void paintComponent(Graphics g){
			g2d = (Graphics2D) g;
			g2d.setColor(Color.GREEN);	         
			g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING,
			        RenderingHints.VALUE_ANTIALIAS_ON);	
			g2d.draw(rechteck);
			as = AffineTransform.getTranslateInstance(100.0,20.0);
			g2d.setTransform(as);
			g2d.draw(rechteck);
	         
		}
 
Ich habe das ganze jetzt auch anders probiert aber irgendwie funktioniert mein Scale nicht
Könnt ihr euch das mal ansehen und mir verraten was falsch ist
Code:
class Scale extends JComponent {
    AffineTransform as;
	Rectangle2D.Double rechteck = new Rectangle2D.Double(210.0,210.0,80.0,60.0);
	Graphics2D g2d;	
		public void paintComponent(Graphics g){
			g2d = (Graphics2D) g;
			g2d.setColor(Color.GREEN);	         
			g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING,
			RenderingHints.VALUE_ANTIALIAS_ON);	
			g2d.draw(rechteck);
			g2d.setTransform(AffineTransform.getScaleInstance(100.0,20.0));
			g2d.draw(new Rectangle2D.Double(310.0,310.0,80.0,60.0));
	         
		}
	         	
}
 
Hallo!

Btw. ein Rectangle ist ein Rectangle2D

Code:
/*
 * Created on 09.05.2005@13:51:59 by Darimont
 *
 * TODO Licence info
 */
package de.tutorials;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

/**
 * @author Darimont
 * 
 * TODO Explain me
 */
public class AffineTransformExample extends JFrame {

	BufferStrategy strategy;

	Rectangle rect = new Rectangle(25, 25, 25, 25);

	Thread runner = new Thread() {
		public void run() {

			int scale = 0;

			while (true) {

				Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
				g.setColor(Color.GREEN);
				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
						RenderingHints.VALUE_ANTIALIAS_ON);

				g.clearRect(0, 0, 320, 240);

				scale++;

				g.setTransform(AffineTransform.getScaleInstance(scale, scale));

				scale = scale % 3 + 1;

				g.draw(rect);

				g.dispose();
				strategy.show();

				try {
					sleep(100L);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	};

	public AffineTransformExample() {
		super("AffineTransformExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setSize(320, 240);
		setVisible(true);

		createBufferStrategy(2);
		strategy = getBufferStrategy();

		runner.start();
	}

	public static void main(String[] args) {
		new AffineTransformExample();
	}
}

Gruß tom
 
Wow sehr beeindruckend.
Leider habe ich immernoch nicht verstanden wieso es bei mir nicht geht?
Was ist denn in meinem Code Falsch das gar nix funktioniert.
Ich hätte ein 2tes grösseres Reschteck erwartet. aber es passiert gar nichts.
hier mal der ganze code damit du es sekber testen kannst. btw. mit setTranslate Instance funktioniert es .
Code:
class Scale extends JComponent {
    AffineTransform as;
	Rectangle2D.Double rechteck = new Rectangle2D.Double(210.0,210.0,80.0,60.0);
	Graphics2D g2d;	
		public void paintComponent(Graphics g){
			g2d = (Graphics2D) g;
			g2d.setColor(Color.GREEN);	         
			g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING,
			RenderingHints.VALUE_ANTIALIAS_ON);	
			g2d.draw(rechteck);
			g2d.setTransform(AffineTransform.getScaleInstance(100.0,20.0));
			g2d.draw(rechteck);
	         
		}
	         	
}

hier die Aufrufende classe.
Code:
import java.awt.BorderLayout;
import javax.swing.JFrame;

class Zeigscale extends JFrame {
 Scale mal;

Zeigscale(){
	
mal= new Scale();
mal.setSize(500,500);
getContentPane().add(mal, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocation(100, 100);

}

public static void main(String[] args){
	Zeigscale f = new Zeigscale();
	f.setVisible(true);
}

}
 
Es scheint so nicht zu gehen wie ich vorhabe. Gibt es noch andere Möglichkeiten ein Rechteck zu vergrössern
 
Zurück