Rotierenden anklickbaren Pfeil in Bildmittelpunkt bewegen

polone

Grünschnabel
Hallo an Alle. Ich versuche ein Pfeilpolygon zu zeichnen dass ich mit der Maus in einem Radius von 180° rotieren lassen kann. Bisher hab ich es schon hingekriegt das gute Stück zu zeichnen und "einigermaßen" zu bewegen. Mein Problem ist aber :
1. Dass es ruckelt wie Hulle wenn ich rotieren will
2. Wie schaffe ich es den Pfeil per anklicken in dem Bereich (180°) zu steuern?
Bisher muss ich in den X Bereich des Panels klicken und die Maus dann bewegen
Es macht den Anschein als sei der Ursprung des Koordinatensystems für den Pfeil im Bildmittelpunkt. Der Ursprung des Panels ist aber immernoch oben links... :(


Über Hilfe würde ich mich sehr freuen! :)


Code:
package arrow;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
 
public class Polygonpfeil extends JFrame implements MouseMotionListener
{
    int p = 0;
    private double winkel;
    private Polygon s = new Polygon(new int[]{p+1,p+1,p+5,p,p-5,p-1,p-1}, new int[]{p,p-35,p-35,p-50,p-35,p-35,p}, 7);
    private int mausXPos;
    private int mausYPos;
    
    public Polygonpfeil()
    {
        this.winkel = 10.00;
        JFrame frame = new JFrame();       
        frame.addMouseMotionListener(this);
        JPanel panel = new JPanel()
        {
            @Override
            public void paintComponent(Graphics pfeil) 
            {                
                Graphics2D g = (Graphics2D)pfeil;
                g.translate(getWidth()/2, getHeight()/2);
               
                g.rotate(winkel* Math.PI / 180.0);               
                g.setColor(Color.red);
                g.fillPolygon(s);
                g.drawString("Pfeilpolygon Gradzahl: "+winkel, 50, 00);      
                setOpaque(false);
                repaint();
                updateUI();
            }
        };

        panel.setOpaque(false);
        frame.add(panel);
        frame.setSize(800, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);   
    }
 
    @Override
    public void mouseDragged(MouseEvent e)
    {    
        this.mausXPos = e.getX();
        this.mausYPos = e.getY();
        
        if(mausXPos<=90 && mausXPos>=-90)   
        {
            this.winkel = mausXPos;
            repaint();
        }
        System.out.println("Maus Position X"+this.mausXPos);
        
    }
    @Override
    public void mouseMoved(MouseEvent e)
    {
        this.mausXPos = e.getX();
        this.mausYPos = e.getY();
        System.out.println("Maus Position X"+this.mausXPos);
    }

    public static void main(String[] args) 
    {
        SwingUtilities.invokeLater(new Runnable() 
        {
            public void run() 
            {
                new Polygonpfeil();
            }
        });
    }
   
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück