Har ni flyttat en figur skapat med GeneralPath innan och anvant er av just createTransformedShape for att gora det? Eller pa nagot annat satt? skapa en AffineTransform som flyttar på den Problemet ar att jag kan for lite java, vet tex inte var jag ska lagga ovanstaende kod for att fa det att fungera, har testad flera varianter men for inte den resultat jag vill ha. koden ovan skapar ju en ny figur.. Har finns koden, den funkar och flyttar pilen men jag vill lara mig createTransformedShape for att flytta en figur med.Nagon som flyttat en figur med GeneralPath innan?
Isf blir jag tacksam om du skulle kunna visa hur detta gar till.
Sv: Nagon som flyttat en figur med GeneralPath innan?
AffineTransform foo = AffineTransform.getTranslateInstance(dx, dy);
Shape ny = din_path.createTransformedShape(foo);
nåt sånt..
du har inte tänkt på att testa själv?
Sv:Nagon som flyttat en figur med GeneralPath innan?
Sv: Nagon som flyttat en figur med GeneralPath innan?
För övrigt så är det inte så enkelt att säga var du ska smälla in den, om du inte visar din kod..Sv:Nagon som flyttat en figur med GeneralPath innan?
Hur skriver man da om koden sa att man for den att funka med createTransformedShape ?
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class Applet1 extends JPanel
{
GeneralPath arrow = new GeneralPath();
Paint gradientPaint = new GradientPaint(-10, 0, Color.red, 30, 0,
Color.yellow);
private int xA, yA;
boolean dragging;
Point offset = new Point();
int rotate_value=0;
public void paintComponent(Graphics _g)
{
super.paintComponent(_g);
Graphics2D g = (Graphics2D) _g;
setBackground(Color.white);
g.translate(xA, yA);
g.rotate(Math.toRadians(rotate_value));
g.setPaint(gradientPaint);
g.fill(arrow);
g.setPaint(Color.BLACK);
g.draw(arrow);
g.rotate(Math.toRadians(rotate_value));
g.translate(-xA, -yA);
}
public Applet1(int x, int y)
{
arrow.moveTo(-40, 10);
arrow.lineTo(0, 10);
arrow.lineTo(0, 0);
arrow.lineTo(30, 20); //Size for arrow head
arrow.lineTo(0, 40); //for height
arrow.lineTo(0, 30);
arrow.lineTo(-40, 30);
arrow.lineTo(-40, 10);
xA = x;
yA = y;
addMouseListener(new MouseAdapter()
{
Rectangle hitRect = new Rectangle(0, 0, 5, 5);
public void mousePressed(MouseEvent e)
{
Point p = e.getPoint();
System.out.println("hitRect" + hitRect.x + " " + p.x);
Graphics2D g = (Graphics2D) getGraphics();
AffineTransform xform = new AffineTransform();
hitRect.x = e.getX();
hitRect.y = e.getY();
xform.setToTranslation(xA, yA);
xform.rotate(Math.toRadians(rotate_value));
g.setTransform(xform);
if (g.hit(hitRect, arrow, false))
{
Rectangle r = getArrowBounds();
System.out.println("The arrow is hit " + r + " " + arrow.getBounds().getWidth());
offset.x = p.x - r.x;
offset.y = p.y - r.y;
dragging = true;
repaint();
}
}
public void mouseReleased(MouseEvent e)
{
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
dragging = false;
}
});
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent e)
{
if (dragging)
{
setCursor(new Cursor(Cursor.MOVE_CURSOR));
Point p = e.getPoint();
System.out.println("dragging " + p );
xA = p.x - offset.x;
yA = p.y - offset.y;
repaint();
}
}
});
}
public Rectangle getArrowBounds()
{
Rectangle r = arrow.getBounds();
return new Rectangle(xA, yA, r.width, r.height);
}
public static void main(String args[])
{
Frame frame = new Frame("Arrow");
frame.add(new Applet1(135, 50));
frame.setBackground(Color.white);
frame.setSize(new Dimension(400, 350));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}