Methode translate() von Polygon



  • Hallo,

    ich möchte folgendes tun, ich will eine neue Komponente, die aus einem sichtbaren Polygon besteht, aber das in der Lage ist, auf Events zu reagieren. Daher habe ich die Klasse JComponent erweitert. Dabei soll die Größe des Objekts an die Größe des Polygons angepaßt werden, daher ermittle ich das umgebende Viereck (

    getBounds()
    

    ) und setze die Position des Objektes mit

    setBounds(rect);
    

    . Allerdings befindet sich das Objekt nicht auf der gleichen "Stelle" wie das Polygon. Ich habe inzwischen herausgefunden, dass ich da mit translate das Polygon verschieben (vermute ich !) muss, aber wie weiß ich was ich da übergeben soll (hier: -rect.x, -rect.y). Gibt es einen Unterschied, wie "normale Objekte" (idR abgeleitet von JComponent) und Graphiken (Point, Polygon, Line2D.Double etc.) gezeichnet werden? Kann mir diese Verhaltensweise jemand erklären ? (Anmerkung: JLayeredPane habe ich verwendet, damit sich die Objekte überlappen können.)

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class ListenerTest extends JFrame {
    
        public ListenerTest(String titel) {
            super(titel);
        }
    
        public static void main(String[] args) {
            ListenerTest bt = new ListenerTest("ListenerTest");
    
            class WindowClose extends WindowAdapter {
                public void windowClosing(WindowEvent we) {
                    System.exit(0);
                }
            }
    
            Container cp = bt.getContentPane();
            JLayeredPane jlp = new JLayeredPane();
    
            int[] x = {20,80,25};
            int[] y =  {180,110,110};
    
            int[] a = {20,80, 200};
            int[] b = {180,110, 200};
    
            int[] c = {120,180, 250};
            int[] d = {280,210, 250};
    
            jlp.add(new Komponente(new Polygon(x,y,x.length), (JComponent) jlp), JLayeredPane.DEFAULT_LAYER);
            jlp.add(new Komponente(new Polygon(a,b,a.length), (JComponent) jlp), JLayeredPane.DEFAULT_LAYER);
            jlp.add(new Komponente(new Polygon(c,d,c.length), (JComponent) jlp), JLayeredPane.DEFAULT_LAYER);
            cp.add(jlp);
    
            bt.addWindowListener(new WindowClose());
            bt.setVisible(true);
            bt.setSize(500,500);
            bt.show();   //! wichtig, sonst kein paint
        }
    }
    
    class Komponente extends JComponent implements MouseMotionListener {
        private Polygon polygon;
        private boolean status;
        public static Komponente currentObject;
    
        public Komponente(Polygon a_polygon, JComponent a_parent) {
            polygon = a_polygon;
    
            Rectangle rect = polygon.getBounds();
            rect.grow(1,1);
    
            setOpaque(false);
            setBorder(new LineBorder(Color.BLACK));
            setBounds(rect);
    
            //verschiebt das Polygon durch Addieren der Argumente zu jetzigen Koordinaten ?
            polygon.translate(-rect.x, -rect.y);
    
            a_parent.addMouseMotionListener(this);
        }
    
        public void mouseMoved(MouseEvent me) {}
    
        public void mouseDragged(MouseEvent me) {}
    
        public void paint(Graphics g) {
            super.paint(g);
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(Color.GREEN);
            g2d.drawPolygon(polygon);
        }
    }
    

    vielen dank



  • alles klar, hat sich schon erledigt, es ging nur darum, dass das Polygon genau in die neue Position des Vierecks platziert wird, daher muss (x,y) des Vierecks von Polygon (0,0) sein.


Anmelden zum Antworten