Pfeilpolygon per Maus rotierbar machen - Kleine Schwierigkeiten

Polone

Mitglied
Hallo an Alle.
Bin noch relativ neu in der Java Welt und 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! :)

Java:
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:

jgh

Top Contributor
na ja, wenn man in der paintComponent() ein repaint-Aufruf hat...muss man sich nicht wundern.

wenn du jetzt bei gedrückter Maustaste deine Winkel beachtest, sollte dir zumindest ein Problem deutlich werden ;)

Java:
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 {
	JPanel panel;
	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);
		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);
			}
		};

		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;
		panel.validate();
		panel.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();
			}
		});
	}

}

[edit]
Es macht den Anschein als sei der Ursprung des Koordinatensystems für den Pfeil im Bildmittelpunkt. Der
translate(int x, int y)
Translates the origin of the graphics context to the point (x, y) in the current coordinate system.
jo, das Panel hat weiterhin seinen Ursprung oben links, das Graphics in der Methode setzt du aber anders...

btw sollte imho der erste Aufruf immer [c]super.paintComponent(pfeil);/[c] sein[/edit]
 
Zuletzt bearbeitet:

Polone

Mitglied
Also soll ich jetzt NOCHMAL ein translate benutzen um das zweite Koordinatensystem in die mitte zu legen?
Hab das repaint nu rausgenommen, aber es ruckelt dennoch. Liegt es vielleicht am fehlenden doubleBuffered oder sowas?

Sorry für vielleicht doofe Fragen :-/
 
Zuletzt bearbeitet:

jgh

Top Contributor
was für ein 2. Koordinatensystem und wo ist das erste???

und nein es liegt nicht am fehlenden DoubleBuffering...das ist von Swing per default true

[java=30]System.out.println(isDoubleBuffered());[/code]

du kannst mit setRenderingHint() des Graphics-Object evt. noch etwas machen...aber na ja, evtl. kann dir jemand anders helfen...ich weiß gerade nicht, worauf du hinaus willst.
[java=31]g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);[/code]
 

Polone

Mitglied
Wenn du das Ding einmal startest siehst du dass der Pfeil in der Mitte liegt. So habe ich ihn ja transformiert.
Wenn du aber mit der Maus im Panel rumbewegst zeigt dir das System.out.println. ja die Mausposition an.
Und die Location der Maus ist halt NICHT wie sie sein sollte im BILDMITTELPUNKT null ..sondern immernoch Links im Panel :) Das ist das Problem.
Ich gleiche ja den Winkel des Pfeils der X-Position der Maus an. Bereich des pfeils von -90 bis +90 Grad soll halt mit der Mausposition X=-90 bis x=+90 in dem Bereich synchron sein.



Edit: Danke für deine Mühe :) und WOW das setRenderingHint lässt den Pfeil gleiten wie n heißes Messer durch Butter :D
 
Zuletzt bearbeitet:

jgh

Top Contributor
du willst mir doch nicht sagen, dass das hier dein Prob löst???

Java:
	public void mouseDragged(MouseEvent e) {
		this.mausXPos = e.getX() - panel.getWidth() / 2;
		this.mausYPos = e.getY() - panel.getHeight() / 2;
 

jgh

Top Contributor
dein Pfeil (dein unsichbares Koordinatensystem^^) hast du durch
Code:
	g.translate(getWidth() / 2, getHeight() / 2);
in die Mitte deines Panels gelegt...deine MouseEvents haben damit eigentlich nichts zu tun.

Wenn du bspw. auch hier dein 2. unsichtbares Koordinatensystem für die MouseEvents in das Zentrum legen willst, kannst du mit [c] e.translatePoint(-panel.getWidth() / 2, -panel.getHeight() / 2);[/c] dieses auch machen...oder wie im vorherigen Bsp-Code
 

Polone

Mitglied
Was meinst mit vernünftig hinbekommen? :) Also im Bereich -90 und +90 bewegt sich die maus bei gedrückter maustaste. der winkel des pfeils wird gleichgesetzt mit dem mousedragged :) oder is das "unsauber programmiert" ?A
 

jgh

Top Contributor
das deine Gradzahl auch korrekt angezeigt wird

Java:
    if(mausXPos<=90 && mausXPos>=-90)   
        {
            this.winkel = mausXPos;
            repaint();
        }
So wie hier oben wird ja nur der Winkel korrekt angezeigt, wenn ich mich innerhalb von 90px rechts und links des Pfeils mich befinde...
 

Polone

Mitglied
Der eigetnliche Gedanke dahinter war, dass ich .....
- den Pfeil anklicken und in dem 180 Grad Bereich rotieren lassen kann. Das ist bisher die erste (dreckige) Übergangslösung gewesen um das anklicken des Pfeiles zu umgehen:D Ich bin für Kritik, Hilfe und Verbesserung seeehr offen & Dankbar:)
 
Zuletzt bearbeitet:

jgh

Top Contributor
dann zeig doch mal her was du gerade hast und wo du dran rumtüfftelst...evtl. kann dir ja jemand helfen, oder dich in die richtige Richtung schubsen ;)
 

Polone

Mitglied
Im Prinzip ist das ja die Ausgangssituation,...wieder.

Java:
package arrow;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
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;
    JPanel panel;
    JFrame frame;
    
    public Polygonpfeil()
    {
        this.winkel = 0.00;
        frame = new JFrame();       
        frame.addMouseMotionListener(this);
        panel = new JPanel()
        {
            @Override
            public void paintComponent(Graphics pfeil) 
            {                
                super.paintComponent(pfeil);
                
                Graphics2D g = (Graphics2D)pfeil;         
                g.translate(getWidth()/2, getHeight()/2);// Koordinatensystem für den Pfeil in die Bildmitte legen
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// Pfeilpolygon antialiasing                
                g.rotate(winkel* Math.PI / 180.0);              
                g.setColor(Color.red);
                g.fillPolygon(s);
                g.drawString(winkel+"°", 50, 00);      
//                setBackground(Color.red);
                setOpaque(false);
                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() - panel.getWidth() / 2;
        this.mausYPos = e.getY() - panel.getHeight() / 2;
        
        
        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() - panel.getWidth() / 2;
        this.mausYPos = e.getY() - panel.getHeight() / 2;
        System.out.println("Maus Position X"+this.mausXPos);
    }

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

Jetzt wäre es halt cool wenn man den Pfeil! anklicken könnte und nicht einfach im Bild im X Bereich -90+90 herumwuselt.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Was genau meinst du...?
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
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;
    JPanel panel;
    JFrame frame;
    
    public Polygonpfeil()
    {
        this.winkel = 0.00;
        frame = new JFrame();       
        panel = new JPanel()
        {
            @Override
            public void paintComponent(Graphics pfeil) 
            {                
                super.paintComponent(pfeil);
                
                Graphics2D g = (Graphics2D)pfeil;         
                g.translate(getWidth()/2, getHeight()/2);// Koordinatensystem für den Pfeil in die Bildmitte legen
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// Pfeilpolygon antialiasing                
                g.rotate(winkel);              
                g.setColor(Color.red);
                g.fillPolygon(s);
                g.drawString((int)Math.toDegrees(winkel)+"°", 50, 00);      
//                setBackground(Color.red);
                setOpaque(false);
                updateUI();
            }
        };
        panel.addMouseMotionListener(this);
        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)
    {    
        int centerX = panel.getWidth() / 2;
        int centerY = panel.getHeight() / 2;
        this.mausXPos = e.getX() - centerX;
        this.mausYPos = e.getY() - centerY;
        
        double angle = Math.atan2(mausYPos, mausXPos);
        this.winkel = angle + Math.PI / 2;
        repaint();
        System.out.println("Angle "+Math.toDegrees(angle));
        System.out.println("Maus Position X"+this.mausXPos);
        
    }
    @Override
    public void mouseMoved(MouseEvent e)
    {
        this.mausXPos = e.getX() - panel.getWidth() / 2;
        this.mausYPos = e.getY() - panel.getHeight() / 2;
        System.out.println("Maus Position X"+this.mausXPos);
    }
 
    public static void main(String[] args) 
    {
        SwingUtilities.invokeLater(new Runnable() 
        {
            @Override
            public void run() 
            {
                new Polygonpfeil();
            }
        });
    }
   
}
 

Polone

Mitglied
1.
Ich meine die MouseMotionListener unten. Bisher ist es ja so dass ich im Bild in den mittleren bereich reinklicke....also zwischen x=-90 und x=+90 und dragge die Mouse. Der Winkel des Pfeils ist synchron mit der X-Koordinate. Das ist meiner Meinung nach halt etwas dirty programmiert weil der Winkel halt nicht berechnet wird :)

2.
Wollte ich gerne dass die Pfeilspitze anklickbar ist. Also quasi dass auf der Pfeilspitze ein rechteckiger Listenerbereich liegt der erkennt dass ich die die Spitze angeklickt habe und so fortschreite!
 

Marco13

Top Contributor
Bei dem geposteten zeigt der Pfeil immer in Richtung des Mousecursors. Dass das beschränkt sein soll und nur nach einem Klick auf die Pfeilspitze passieren soll ist ja unabhängig davon...
 

Polone

Mitglied
Ich will gerade bewerkstelligen dass ich den Pfeil öfters auf ein JFrame lege, also mehrere Objekte davon erstelle die übereinander sitzen, und jeden neuen Pfeil an die Spitze des vorherigen Pfeils hefte. Sozusagen mit beispielsweise 5 Pfeilen eine Wegstrecke darstelle. Da knabbere ich gerade dran.

Meine Idee war es die Panels einfach übereinander zu legen und jedes Mal die Mitte des neu angelegten Pfeilpanels mit der Spitze des vorherigen Pfeiles synchron zu halten. Klingt das logisch/möglich? :)
 

jgh

Top Contributor
jo, grundsätzlich ist das möglich...hier mal auf die schnelle hingecodet, die Pfeile müsstest du dann natürlich nicht in die Mitte des Panels starten lassen, sondern am unteren Ende...

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Polygon;
import java.awt.RenderingHints;
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;
	JPanel panel;
	JFrame frame;

	public Polygonpfeil() {
		this.winkel = 0.00;
		frame = new JFrame();

		frame.setLayout(new GridLayout(5, 1));
		for (int i = 0; i < 5; i++) {
			frame.add(initPfeilPanel());
		}
		frame.setSize(800, 200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	public JPanel initPfeilPanel() {
		panel = new JPanel() {
			@Override
			public void paintComponent(Graphics pfeil) {
				super.paintComponent(pfeil);

				Graphics2D g = (Graphics2D) pfeil;
				g.translate(getWidth() / 2, getHeight() / 2);// Koordinatensystem
																// für
																// den
																// Pfeil
																// in
																// die
																// Bildmitte
																// legen
				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
						RenderingHints.VALUE_ANTIALIAS_ON);// Pfeilpolygon
															// antialiasing
				g.rotate(winkel);
				g.setColor(Color.red);
				g.fillPolygon(s);
				g.drawString((int) Math.toDegrees(winkel) + "°", 50, 00);
				// setBackground(Color.red);
				setOpaque(false);
				updateUI();

			}
		};
		panel.addMouseMotionListener(this);
		panel.setOpaque(false);
		return panel;
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		int centerX = panel.getWidth() / 2;
		int centerY = panel.getHeight() / 2;
		this.mausXPos = e.getX() - centerX;
		this.mausYPos = e.getY() - centerY;

		double angle = Math.atan2(mausYPos, mausXPos);
		System.out.println(angle);
		if (-90 <= Math.toDegrees(angle) && Math.toDegrees(angle) <= 90) {
			this.winkel = angle + Math.PI / 2;
			repaint();
			System.out.println("Angle " + Math.toDegrees(angle));
			System.out.println("Maus Position X" + this.mausXPos);
		}

	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// this.mausXPos = e.getX() - panel.getWidth() / 2;
		// this.mausYPos = e.getY() - panel.getHeight() / 2;
		// System.out.println("Maus Position X" + this.mausXPos);
	}

	public static void main(String[] args) {
		int b = 52;
		b -= 26;
		b += 20;
		System.out.println(b);
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Polygonpfeil();
			}
		});
	}

}
 

Marco13

Top Contributor
Was soll das denn? :noe: Es geht also nicht darum, einen Pfeil zu drehen, sondern Punkte zu verschieben (die zufällig die Endpunkte von Pfeilen sind) !?
 

Polone

Mitglied
Ja doch. In dem Sinne ja beides. Wenn ich ein Pfeilobjekt erstelle und das Objekt dann drehe, soll an den Endpunkt des Pfeiles wenn möglich - bei nächster Objekterstellung das nächste Pfeilobjekt dranklemmen.

Ich will mit ungenauen Aussagen keine Verwirrung stiften oder sowas :D Ich bin noch "Anfänger" :D
 

Marco13

Top Contributor
Ja was heißt drehen? Alle Pfeile? Nur ein Pfeil? Sollen sich die Längen der anderen ändern? Willst du eine kinematische Kette modellieren? :autsch:
 

Polone

Mitglied
Achso, dachte die Detailtiefe spielt noch keine Rolle. Also es sollen sich alle Pfeile im 180° Winkel "drehen" lassen. Die Länge soll gleich bleiben und weil die ja aneinander hängen, soll sich das Ende des oberen Pfeils mit der Spitze des unteren bewegen während aber die SPITZE des oberen Pfeils in der Zeit fest ist. Weißt du was ich meine? :)



edit: Da sich ja die Länge nicht ändern soll, muss sich das Panel auf dem der Pfeil sitzt bewegen
 
Zuletzt bearbeitet:

Polone

Mitglied
Ja das geht ja stark in die Richtung. Nur dass es bei mir halt Pfeilobjekte sein, und im Bereich von 180° zu drehen sein sollen.
Danke dir für den Tip & sorry dass ichs nicht von vorn herein genau so beschrieben hab. Aber ich dachte ich komme mit kleinen Teil-Hilfslösungen allein zum Ziel.
 

Marco13

Top Contributor
Bei der ersten Beschreibung dachte ich, es ginge um sowas wie ein "Dashboard" - Ein Armaturenbrett wo man mit dem Pfeil wie auf einem Tacho irgendeinen Wert einstellen kann. Da würde man natürlich anders ansetzen.

In diesem Fall ist es wohl sowas wie eine kinematische Kette (keine "echte", aber sowas ähnliches). Man hat einen Pfeil mit Start- und Endpunkt. Und der kann rotiert werden. Und am Endpunkt hängen ggf. weitere Pfeile, die sich aber "starr" mitbewegen sollen, wenn der erste rotiert wird. Also muss man nur die Pfeile speichern, und bei jedem Pfeil sagen, dass er dort anfangen soll, wo der letzte aufgehört hat. Es wäre wohl nicht verkehrt, sich dafür eine Art "Modell" zu erstellen, mit dem man das zusammenfasst, was man eigentlich beschreiben will. (Das zu zeichnen könnte dann ein zweiter Schritt sein).
 

Polone

Mitglied
Ah ok. Demnach wäre aber mein Ansatz falsch oder? :

Ich habe mir (mit Netbeans) einen Frame erstellt auf welchem ein Panel liegt dass Oberfläche heißt und erstelle auf diesem Panel dann immer wieder Pfeilobjekte die halt auf Panel sitzen. dann habe ich quasi bei X mal Button klicken X Panels die übereinander "angedockt" liegen.

Ich glaub ich hab da am Anfang den Denkfehler gehabt. Weil die Frage die sich mir bei meiner Variante stellt/gestellt hat: Wie knüpfe ich den Urpsrungspunkt von Pfeil 2 an die Spitze von Pfeil 1 ... Das geht dann ja eigetnlich doch nur wenn alle pfeile auf DEM SELBEN Panel liegen und jeder Pfeil einen Anfangs und EndPointer hat?
 

Marco13

Top Contributor
Man könnte auch alle Pfeile auf getrennte Panels legen, und die in ein LayeredPane packen, und entsprechend transparent machen und verschieben. Man kann auch mit einer Zange eine Schraube in die Wand hämmern. Wenn man das will oder für angebracht hält. Bei kleinen, isolierten Teilaspekten von Problemen kann man oft nur sagen "Joa, das könnte man so-und-so machen", aber es ist lästig wenn man das immer macht und dann als Antwort kommt "Jaaa, aber bei mir geht das nicht, weil [irgendwas, was vorher nicht erwähnt wurde]". Wenn man sowas hätte wie
Java:
interface Chain
{
    List<Point2D> getPoints();
    List<Point2D> getLinks();

    void setAngle(int index, double angle);
}
würde das vermutlich schon für vieles dfes bisher genannten (!) ausreichen, aber ... wer weiß....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Linie mit der Maus auswählen AWT, Swing, JavaFX & SWT 5
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Maus "locken" für Menü AWT, Swing, JavaFX & SWT 8
D Grafiken an Maus anhängen AWT, Swing, JavaFX & SWT 2
P Event Handling Gedrückte Maus Blockiert MausEvents AWT, Swing, JavaFX & SWT 2
R Swing Per Maus JLabel resizen AWT, Swing, JavaFX & SWT 6
F Maus von alleine bewegen! AWT, Swing, JavaFX & SWT 8
G Swing JPanel per Maus verschieben AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C AWT Mausbarriere Maus fangen AWT, Swing, JavaFX & SWT 10
J "Auswahlfenster" mit Maus auf JLabel zeichnen AWT, Swing, JavaFX & SWT 4
W Swing Bild zeichnen wenn Maus an bestimmter Position ist AWT, Swing, JavaFX & SWT 4
J Inaktivität von Maus und Tastatur AWT, Swing, JavaFX & SWT 4
G AWT Images aus Imagearray an die Maus pappen und bewegen AWT, Swing, JavaFX & SWT 4
F Element anzeigen / erstellen. Maus vs Controller AWT, Swing, JavaFX & SWT 7
M 3D-Grafik Bewegung mit der Maus ohne Klicken AWT, Swing, JavaFX & SWT 10
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
Y AWT Maus Koordinaten abspeichern in eine Textfile AWT, Swing, JavaFX & SWT 3
Weltall 7 AWT Maus-Events werden doppelt ausgeführt AWT, Swing, JavaFX & SWT 12
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
J maus festlegen AWT, Swing, JavaFX & SWT 6
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
T Swing JComboBox: Listeneinträge mit der Maus verschieben AWT, Swing, JavaFX & SWT 5
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
W Swing Maus Rastersprung AWT, Swing, JavaFX & SWT 3
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
E Hilfetext anzeigen beim Überfahren mit der Maus AWT, Swing, JavaFX & SWT 3
G Maus über Button AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
G Listenelemente mit der Maus verschieben AWT, Swing, JavaFX & SWT 4
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
B JTable - Wechsel der Spalte bei TAB, RETURN oder Maus AWT, Swing, JavaFX & SWT 5
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
F Größenänderung mittels Maus - selbst implementieren? AWT, Swing, JavaFX & SWT 3
R Einstellen der Maus Rad Geschwindigkeit beim Scrollen AWT, Swing, JavaFX & SWT 3
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
W Maus Rahmen zeichnen AWT, Swing, JavaFX & SWT 10
A JFileChooser - Mehrere Dateien per Maus markieren (nokeys) AWT, Swing, JavaFX & SWT 7
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
R JTable: Maus-Click ohne Datensätze AWT, Swing, JavaFX & SWT 9
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
J Context Menü Maus AWT, Swing, JavaFX & SWT 3
G JTable selektion der Zeile bei Fokusieren mit der Maus AWT, Swing, JavaFX & SWT 5
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
lin Frame bei Drücken eines Buttons mit Maus verschieben AWT, Swing, JavaFX & SWT 7
G [AWT] Zeichnungen per Maus auswählen AWT, Swing, JavaFX & SWT 8
D Ne Maus Event Frage AWT, Swing, JavaFX & SWT 4
D Polygon mit der Maus zeichnen AWT, Swing, JavaFX & SWT 2
M Zusätzlichen Maus-Klick erzeugen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben