Jag har ett program som den ena filen ritar pilar och de andra filen ritar boxar som man kan flytta och rotera runt.
Problemet ligger i den andra filen alltsa klassen GraphicArrow, dess addMouseListener vill inte fungera nar jag klickar pa musen, kan nagon tala om vad det ar som ar fel?
Har kommer koden:
klassen GraphicArrow
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class GraphicArrow extends JComponent
{
GeneralPath arrow = new GeneralPath();
Stroke dashStroke = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
10f, new float[] {4f, 4f}, 0f);
Paint gradientPaint = new GradientPaint(-30, 0, Color.red, 10, 0, Color.yellow);
private int xA, yA;
public GraphicArrow() {
arrow.moveTo(-20, -10);
}
public GraphicArrow(int x, int y)
{
arrow.moveTo(-20, -10);
arrow.lineTo(0, -10);
arrow.lineTo(0, -20);
arrow.lineTo(20, 0);
arrow.lineTo(0, 20);
arrow.lineTo(0, 10);
arrow.lineTo(-20, 10);
arrow.lineTo(-20, -10);
xA = x;
yA = y;
addMouseListener(new MouseAdapter()
{
Rectangle hitRect = new Rectangle(0, 0, 5, 5);
public void mouseClicked(MouseEvent e)
{
Graphics2D g = (Graphics2D) getGraphics();
AffineTransform xform = new AffineTransform();
// puts hit rectangle 2 pixels around click point
hitRect.x = e.getX() - 2;
hitRect.y = e.getY() - 2;
Rectangle bounds = arrow.getBounds();
if (g.hit(hitRect, arrow, false))
System.out.println("Traff i pilen ");
}
});
}
public void paintComponent(Graphics _g)
{
super.paintComponent(_g);
Graphics2D g = (Graphics2D) _g;
// Translates and rotates the arrow
g.translate(xA, yA);
g.rotate(Math.PI / 1);
// Fills and outlines the arrow
g.setPaint(gradientPaint);
g.fill(arrow);
g.setPaint(Color.BLACK);
g.draw(arrow);
// Translates and rotates back to normal
g.rotate(Math.PI / -1);
g.translate(-xA, -yA);
}
public static void main(String args[]) {
JFrame frame = new JFrame("Arrow");
frame.getContentPane().add(new GraphicArrow());
frame.setBackground(Color.white);
frame.setSize(new Dimension(400, 350));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}