# Rectangle verschieben



## plammy (11. Jun 2012)

Hallo .. Ich möchte ein speziellen Rechteckt ( bausteinRect ) auf ein JPanel zeichnen und denn danach mit dem Mouse verschieben können. Was mache ich falsch in meiner updateLocation()-Methode, dass sich der Rechteck nicht verschieben lässt?


```
public class EditPanel extends JPanel 
{
   
    private int xPos, yPos;
    boolean pressOut = false;
    
    
    Rectangle bausteinRect;
 
    Color grayRect = new Color(230,227,224);
    Color orangeRect = new Color(211,111,53);
    
    public  EditPanel()
    {

        
        /* ********************* Mouse Listener ***************************  */
        addMouseListener(new MouseAdapter() 
        {
           
            public void mousePressed(MouseEvent e) 
            {  
                xPos = bausteinRect.x - e.getX();
                yPos = bausteinRect.y - e.getY();
                
                if (bausteinRect.contains(e.getX(), e.getY()))
                {
                    updateLocation(e);
                    System.out.println("im Baustein");
                }
                else 
                {
                    pressOut = true;
                    System.out.println("auserhalb");
                }  
            }
            
            public void mouseReleased(MouseEvent e) 
            {
                  if (bausteinRect.contains(e.getX(), e.getY()))
                  {
                       updateLocation(e);
                       System.out.println("mouseReleased"); 
                  }
                  else
                  {
                      pressOut = false;
                  }
            }
            
        });

     
        /* ****************** Mouse Motion Listener ***********************  */
        addMouseMotionListener(new MouseMotionAdapter() 
        {
       
            public void mouseDragged(MouseEvent e) 
            {
              if (!pressOut)
              {
                updateLocation(e);
              }
              else
              {
                  
              }
           }
        });
        
   
    }

    public void updateLocation(MouseEvent e) 
    {
        bausteinRect.setLocation(xPos + e.getX(), yPos + e.getY());
        repaint();
  }

    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
  
            //baustein
            bausteinRect = new Rectangle(getX(),getY(),CreateFile.cf.bausteinW,CreateFile.cf.bausteinH);
            g.setColor(orangeRect);  
            g.fill3DRect(bausteinRect.x, bausteinRect.y, bausteinRect.width, bausteinRect.height,true);        
       
            
    }

}
```


----------



## Marco13 (11. Jun 2012)

bausteinRect = new Rectangle(getX(),getY(),CreateFile.cf.bausteinW,CreateFile.cf.bausteinH);

Sieht gefährlich aus. Erstens wird dadurch jede Änderung wieder "weggeworfen", und zweitens: Hast du die Methoden "getX()" und "getY()" selbst implementiert? Beachte, dass du damit die Methoden aus Component überschreibst! Bennenn' die ggf. um zu "getPosX/getPosY" oder so...


----------



## plammy (11. Jun 2012)

nein sind nicht selbstdefiniert.. ich greife auf die standartmethoden zu... da kann ich das auch mit 0,0 ersetzten... das ist aber nicht das Problem.. der rectangle baustein wird ja gezeichnet aber ich kann den nicht verschieben...


----------



## SlaterB (11. Jun 2012)

genialerweise löscht du in paintComponent das bisherige Rectangle,
bzw. setzt x/y des JPanels, welche ganz woanders sind, einfach nur ein Störsender


```
Rectangle bausteinRect = new Rectangle(40, 40, 70, 70);


  ....


    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        // baustein
        g.setColor(orangeRect);
        g.fill3DRect(bausteinRect.x, bausteinRect.y, bausteinRect.width, bausteinRect.height, true);
    }
```
geht


----------



## plammy (11. Jun 2012)

*Wenn ich das so mache wie du vorgeschlagen mit feste Daten funktioniert prima  aber wenn ich das so mache dass der user die größe per eingabe später bestimmen soll kriege ich folgende Fehler-Meldung
*


Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
	at ltp.GUI.actionPerformed(GUI.java:180)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.NullPointerException
	at ltp.EditPanel.<init>(EditPanel.java:29)
	at ltp.CreateFile.<init>(CreateFile.java:23)
	at ltp.CreateFile.<clinit>(CreateFile.java:24)
	... 39 more



```
public class EditPanel extends JPanel 
{
 
    private int xPos, yPos; //Aktuelle Maus-Koordinaten
    boolean pressOut = false;
    
 
    Color grayRect = new Color(230,227,224);
    Color orangeRect = new Color(211,111,53);
    
    Rectangle bausteinRect = new Rectangle(0,0,CreateFile.cf.bausteinW,CreateFile.cf.bausteinH);
    
    public  EditPanel()
    {
/* ********************* Mouse Listener ***************************  */
        addMouseListener(new MouseAdapter() 
        {
           
            public void mousePressed(MouseEvent e) 
            {  
                xPos = bausteinRect.x - e.getX();
                yPos = bausteinRect.y - e.getY();
                
                if (bausteinRect.contains(e.getX(), e.getY()))
                {
                    updateLocation(e);
                    System.out.println("im Baustein");
                }
                else 
                {
                    pressOut = true;
                    System.out.println("auserhalb");
                }  
            }
            
            public void mouseReleased(MouseEvent e) 
            {
                  if (bausteinRect.contains(e.getX(), e.getY()))
                  {
                       updateLocation(e);
                       System.out.println("mouseReleased"); 
                  }
                  else
                  {
                      pressOut = false;
                  }
            }
            
        });

     
        /* ****************** Mouse Motion Listener ***********************  */
        addMouseMotionListener(new MouseMotionAdapter() 
        {
       
            public void mouseDragged(MouseEvent e) 
            {
              if (!pressOut)
              {
                updateLocation(e);
              
              }
              else
              {
                  
              }
           }
        });
        
   
    }

    public void updateLocation(MouseEvent e) 
    {
        bausteinRect.setLocation(xPos + e.getX(), yPos + e.getY());
        System.out.println("update");
        repaint();
  }

    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
   
            int centerX = getWidth()/2;     
            int beginPosition = (getHeight()-(CreateFile.cf.headerH + CreateFile.cf.contentH+ CreateFile.cf.footerH+CreateFile.cf.tile1H+CreateFile.cf.tile3H))/2;

            
            //header
            Rectangle headerRect = new Rectangle(centerX-CreateFile.cf.headerW/2,beginPosition,CreateFile.cf.headerW,CreateFile.cf.headerH);      
            g.setColor(grayRect);
            headerRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H);
            g.fill3DRect(headerRect.x, headerRect.y, headerRect.width, headerRect.height,true);
            
//            MediaTracker mt = new MediaTracker(this);
//            img = Toolkit.getDefaultToolkit().getImage("C:\\Images\\szlogo.jpg");
//            mt.addImage(img,0);
//
//            g.drawImage(img,centerX-CreateFile.cf.headerW/2,beginPosition,this);
   
            //content
            Rectangle contentRect = new Rectangle(centerX-CreateFile.cf.contentW/2,beginPosition + CreateFile.cf.headerH,CreateFile.cf.contentW,CreateFile.cf.contentH);
            g.setColor(grayRect);
            contentRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H);   
            g.fill3DRect(contentRect.x, contentRect.y, contentRect.width, contentRect.height,true);


            //footer
            Rectangle footerRect = new Rectangle(centerX-CreateFile.cf.footerW/2,beginPosition+CreateFile.cf.headerH+CreateFile.cf.contentH,CreateFile.cf.footerW,CreateFile.cf.footerH);
            g.setColor(grayRect);
            footerRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H+CreateFile.cf.tile3H);   
            g.fill3DRect(footerRect.x, footerRect.y, footerRect.width, footerRect.height,true);


            //tile 1
            Rectangle tile1Rect = new Rectangle(centerX-CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition,CreateFile.cf.tile1W,CreateFile.cf.tile1H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile1Rect.x, tile1Rect.y, tile1Rect.width, tile1Rect.height,true);


            //tile 2    
            Rectangle tile2Rect = new Rectangle(centerX+CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition+CreateFile.cf.tile1H,CreateFile.cf.tile2W,CreateFile.cf.tile2H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile2Rect.x, tile2Rect.y, tile2Rect.width, tile2Rect.height,true);


            //tile3      
            contentRect.translate(0,CreateFile.cf.tile3H);
            Rectangle tile3Rect = new Rectangle(centerX-CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition+CreateFile.cf.tile1H+CreateFile.cf.headerH+CreateFile.cf.contentH,CreateFile.cf.tile3W,CreateFile.cf.tile3H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile3Rect.x, tile3Rect.y, tile3Rect.width, tile3Rect.height,true);


            //baustein
            
            g.setColor(orangeRect);  
            g.fill3DRect(bausteinRect.x, bausteinRect.y, bausteinRect.width, bausteinRect.height,true);        
       
            
    }

}
```


----------



## SlaterB (11. Jun 2012)

dein Wort 'später' drückt doch schon viele Informationen aus,
beim Init von EditPanel kannst du noch nicht auf CreateFile.cf zugreifen, selbst wenn es ohne Exception ginge hättest du sicher falsche Werte, nicht die spätere Eingabe,
also das Rectange wieder ändern

bisher hattest du allerdings schon beim ersten paint CreateFile.cf verfügbar, denkbar wäre also schon relativ früh,
beim Programmstart, zu initialisieren, das ist nur das Henne-Ei-Problem, welche Objekte sind wann da, wer greift worauf zu,
ich hoffe du weißt schon ungefähr, was ich bisher meine (auch wenn es nur offensichtliche Grundlagen alles Programme seind)
und kannst da bisschen was verbessern,

wenn später Benutzereingaben erfolgen, musst diese Information irgendwie übertragen, z.B. von einem Listener dort Aufruf an das EditPanel,
vielleicht nicht ganz einfach wenn da bisher keine Kommunikation besteht

------

eine ganz simple Lösung noch, nahe deiner ursprünglichen:
verwende erst 70,70 und setze in paintComponent nur breite/hoehe neu, ohne x,y zu ändern,

du kannst sogar wieder wie bisher ein neues Rectangle setzen, auf das Objekt an sich kommt es nicht an, 
achte nur darauf dass x,y vom alten übernommen wird,
wobei dieses null sein kann, da wäre ein if nötig, die Startposition musst du dir dann selber überlegen,

noch schöner in der Richtung vielleicht, gar kein Rectangle, sondern nur einen Point oder int x/y zu verwenden,
und in paintComponent als Breite/ Höhe immer direkt auf CreateFile.cf zugreifen


----------



## plammy (11. Jun 2012)

???:L???:L???:L

ich versteh nicht was du meinst.. bei alle anderen rectangles klappt das mit Create.cf


----------



## SlaterB (11. Jun 2012)

es ist die Frage des Zeitpunkts, schau dir den StackTrace an, wie ich jetzt auch schaue,
das EditPanel wird in Zeile 24 von CreateFile erstellt, alles was dahinter steht ist noch nicht initialisiert,
während paintComponent erstmalig erst viel später drankommt,

aber egal, musst du ja auch nicht zwingend verstehen, die untigen Tipps stehen für sich


----------



## plammy (12. Jun 2012)

> eine ganz simple Lösung noch, nahe deiner ursprünglichen:
> verwende erst 70,70 und setze in paintComponent nur breite/hoehe neu, ohne x,y zu ändern,


 Geht nicht 


```
public class EditPanel extends JPanel 
{
    
    Image img;
    private int xPos, yPos;
    boolean pressOut = false;
 
    Color grayRect = new Color(230,227,224);
    Color orangeRect = new Color(211,111,53);
    
    Rectangle bausteinRect = new Rectangle(70,70,CreateFile.cf.bausteinW,CreateFile.cf.bausteinH);
    

    
    public  EditPanel()
    {
       
        
        /* ********************* Mouse Listener ***************************  */
        addMouseListener(new MouseAdapter() 
        {
           
            public void mousePressed(MouseEvent e) 
            {  
                xPos = bausteinRect.x - e.getX();
                yPos = bausteinRect.y - e.getY();
                
                if (bausteinRect.contains(e.getX(), e.getY()))
                {
                    updateLocation(e);
                    System.out.println("im Baustein");
                }
                else 
                {
                    pressOut = true;
                    System.out.println("auserhalb");
                }  
            }
            
            public void mouseReleased(MouseEvent e) 
            {
                  if (bausteinRect.contains(e.getX(), e.getY()))
                  {
                       updateLocation(e);
                       System.out.println("mouseReleased"); 
                  }
                  else
                  {
                      pressOut = false;
                  }
            }
            
        });

     
        /* ****************** Mouse Motion Listener ***********************  */
        addMouseMotionListener(new MouseMotionAdapter() 
        {
       
            public void mouseDragged(MouseEvent e) 
            {
              if (!pressOut)
              {
                updateLocation(e);
              
              }
              else
              {
                  
              }
           }
        });
        
   
    }

    public void updateLocation(MouseEvent e) 
    {
        bausteinRect.setLocation(xPos + e.getX(), yPos + e.getY());
        System.out.println("update");
        repaint();
  }

    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
   
            int centerX = getWidth()/2;     
            int beginPosition = (getHeight()-(CreateFile.cf.headerH + CreateFile.cf.contentH+ CreateFile.cf.footerH+CreateFile.cf.tile1H+CreateFile.cf.tile3H))/2;

            
            //header
            Rectangle headerRect = new Rectangle(centerX-CreateFile.cf.headerW/2,beginPosition,CreateFile.cf.headerW,CreateFile.cf.headerH);      
            g.setColor(grayRect);
            headerRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H);
            g.fill3DRect(headerRect.x, headerRect.y, headerRect.width, headerRect.height,true);
            
//            MediaTracker mt = new MediaTracker(this);
//            img = Toolkit.getDefaultToolkit().getImage("C:\\Images\\szlogo.jpg");
//            mt.addImage(img,0);
//
//            g.drawImage(img,centerX-CreateFile.cf.headerW/2,beginPosition,this);
   
            //content
            Rectangle contentRect = new Rectangle(centerX-CreateFile.cf.contentW/2,beginPosition + CreateFile.cf.headerH,CreateFile.cf.contentW,CreateFile.cf.contentH);
            g.setColor(grayRect);
            contentRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H);   
            g.fill3DRect(contentRect.x, contentRect.y, contentRect.width, contentRect.height,true);


            //footer
            Rectangle footerRect = new Rectangle(centerX-CreateFile.cf.footerW/2,beginPosition+CreateFile.cf.headerH+CreateFile.cf.contentH,CreateFile.cf.footerW,CreateFile.cf.footerH);
            g.setColor(grayRect);
            footerRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H+CreateFile.cf.tile3H);   
            g.fill3DRect(footerRect.x, footerRect.y, footerRect.width, footerRect.height,true);


            //tile 1
            Rectangle tile1Rect = new Rectangle(centerX-CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition,CreateFile.cf.tile1W,CreateFile.cf.tile1H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile1Rect.x, tile1Rect.y, tile1Rect.width, tile1Rect.height,true);


            //tile 2    
            Rectangle tile2Rect = new Rectangle(centerX+CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition+CreateFile.cf.tile1H,CreateFile.cf.tile2W,CreateFile.cf.tile2H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile2Rect.x, tile2Rect.y, tile2Rect.width, tile2Rect.height,true);


            //tile3      
            contentRect.translate(0,CreateFile.cf.tile3H);
            Rectangle tile3Rect = new Rectangle(centerX-CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition+CreateFile.cf.tile1H+CreateFile.cf.headerH+CreateFile.cf.contentH,CreateFile.cf.tile3W,CreateFile.cf.tile3H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile3Rect.x, tile3Rect.y, tile3Rect.width, tile3Rect.height,true);


            //baustein
     
            
            g.setColor(orangeRect);  
            g.fill3DRect(0, 0, bausteinRect.width, bausteinRect.height,true);        
       
            
    }

  
}
```


----------



## SlaterB (12. Jun 2012)

dass du CreateFile.cf.bausteinW nicht ganz am Anfang bei der Objektinitialisierung aufrufen darst
ist immer noch nicht zu dir durchgedrungen?

70,70 bei x,y einzusetzen ändert daran nichts, ich sprach offensichtlich von den hinteren beiden Parametern,
dort 70, 70 (wie übrigens auch in meinem Code), CreateFile.cf.bausteinW muss weg.

das ist ja wirklich langsam ärgerlich wie konsequent mit Pech alles falsch läuft und kein Verständnis da ist..,
überlege doch in Ruhe was deine Befehle in Worten für eine Bedeutung haben sollen,
oder wenn du es nicht verstehst, dann stelle ganz konkrete Frage a la
"welchen Zweck hat 70,70 am Anfang, wofür soll ich das machen?"
nur blind beliebiges nach Vermutung irgendwo einzusetzen, das kann dann ja doch schiefgehen wie wir nun sehen und ich kaum gedacht hatte

in paintComponent dann CreateFile.cf.bausteinW usw. zu setzen, wie du es ganz am Anfang hattest und ich dir wieder vorschlug,
das fehlt aktuell übrigens auch..,
die ganze Zeit ist nur x/y das elementare Problem, dort musst du andere Werte setzen bzw. es unterlassen falsche Werte zu setzen,
CreateFile.cf.bausteinW kannst du wie früher lassen


----------



## plammy (12. Jun 2012)

hab schon auch versuchs.. funktioniert dennoch nicht... 


```
public class EditPanel extends JPanel 
{
    
    Image img;
    private int xPos, yPos;
    boolean pressOut = false;
 
    Color grayRect = new Color(230,227,224);
    Color orangeRect = new Color(211,111,53);
    
    Rectangle bausteinRect = new Rectangle(0, 0, 70, 70);

    public  EditPanel()
    {
        /* ********************* Mouse Listener ***************************  */
        addMouseListener(new MouseAdapter() 
        {
           
            public void mousePressed(MouseEvent e) 
            {  
                xPos = bausteinRect.x - e.getX();
                yPos = bausteinRect.y - e.getY();
                
                if (bausteinRect.contains(e.getX(), e.getY()))
                {
                    updateLocation(e);
                    System.out.println("im Baustein");
                }
                else 
                {
                    pressOut = true;
                    System.out.println("auserhalb");
                }  
            }
            
            public void mouseReleased(MouseEvent e) 
            {
                  if (bausteinRect.contains(e.getX(), e.getY()))
                  {
                       updateLocation(e);
                       System.out.println("mouseReleased"); 
                  }
                  else
                  {
                      pressOut = false;
                  }
            }
            
        });

     
        /* ****************** Mouse Motion Listener ***********************  */
        addMouseMotionListener(new MouseMotionAdapter() 
        {
       
            public void mouseDragged(MouseEvent e) 
            {
              if (!pressOut)
              {
                updateLocation(e);
              
              }
              else
              {
                  
              }
           }
        });
        
   
    }

    public void updateLocation(MouseEvent e) 
    {
        bausteinRect.setLocation(xPos + e.getX(), yPos + e.getY());
        System.out.println("update");
        repaint();
  }

    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
   
            int centerX = getWidth()/2;     
            int beginPosition = (getHeight()-(CreateFile.cf.headerH + CreateFile.cf.contentH+ CreateFile.cf.footerH+CreateFile.cf.tile1H+CreateFile.cf.tile3H))/2;

            
            //header
            Rectangle headerRect = new Rectangle(centerX-CreateFile.cf.headerW/2,beginPosition,CreateFile.cf.headerW,CreateFile.cf.headerH);      
            g.setColor(grayRect);
            headerRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H);
            g.fill3DRect(headerRect.x, headerRect.y, headerRect.width, headerRect.height,true);
            
//            MediaTracker mt = new MediaTracker(this);
//            img = Toolkit.getDefaultToolkit().getImage("C:\\Images\\szlogo.jpg");
//            mt.addImage(img,0);
//
//            g.drawImage(img,centerX-CreateFile.cf.headerW/2,beginPosition,this);
   
            //content
            Rectangle contentRect = new Rectangle(centerX-CreateFile.cf.contentW/2,beginPosition + CreateFile.cf.headerH,CreateFile.cf.contentW,CreateFile.cf.contentH);
            g.setColor(grayRect);
            contentRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H);   
            g.fill3DRect(contentRect.x, contentRect.y, contentRect.width, contentRect.height,true);


            //footer
            Rectangle footerRect = new Rectangle(centerX-CreateFile.cf.footerW/2,beginPosition+CreateFile.cf.headerH+CreateFile.cf.contentH,CreateFile.cf.footerW,CreateFile.cf.footerH);
            g.setColor(grayRect);
            footerRect.translate(-CreateFile.cf.tile2W/2,CreateFile.cf.tile1H+CreateFile.cf.tile3H);   
            g.fill3DRect(footerRect.x, footerRect.y, footerRect.width, footerRect.height,true);


            //tile 1
            Rectangle tile1Rect = new Rectangle(centerX-CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition,CreateFile.cf.tile1W,CreateFile.cf.tile1H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile1Rect.x, tile1Rect.y, tile1Rect.width, tile1Rect.height,true);


            //tile 2    
            Rectangle tile2Rect = new Rectangle(centerX+CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition+CreateFile.cf.tile1H,CreateFile.cf.tile2W,CreateFile.cf.tile2H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile2Rect.x, tile2Rect.y, tile2Rect.width, tile2Rect.height,true);


            //tile3      
            contentRect.translate(0,CreateFile.cf.tile3H);
            Rectangle tile3Rect = new Rectangle(centerX-CreateFile.cf.headerW/2-CreateFile.cf.tile2W/2,beginPosition+CreateFile.cf.tile1H+CreateFile.cf.headerH+CreateFile.cf.contentH,CreateFile.cf.tile3W,CreateFile.cf.tile3H);
            g.setColor(orangeRect);  
            g.fill3DRect(tile3Rect.x, tile3Rect.y, tile3Rect.width, tile3Rect.height,true);


            //baustein
     
            bausteinRect = new Rectangle(0,0,CreateFile.cf.bausteinW,CreateFile.cf.bausteinH);
            g.setColor(orangeRect);  
            g.fill3DRect(bausteinRect.x, bausteinRect.y, bausteinRect.width, bausteinRect.height,true);        
       
            
    }

    
}
```


----------



## SlaterB (12. Jun 2012)

so, dass ist jetzt wieder die Ursprungsversion, nur mit vorinitialisierten bausteinRect, was nicht ganz so wichtig ist,
und vor allem hast du in paintComponent überschreibst du in paintComponent nun x/y mit 0,0 statt im ersten Post getX(),getY(),
wahrscheinlich ist dass dasselbe, war damals auch 0,0,

also zusammen ziemlich genau die Version des ersten Posts, nicht ganz so schlimm wie es klingen mag,

was hatte ich in meinem Posting geschrieben?


> eine ganz simple Lösung noch, nahe deiner ursprünglichen:
> verwende erst 70,70 und setze in paintComponent nur breite/hoehe neu, *ohne x,y zu ändern*,
> 
> du kannst sogar wieder wie bisher ein neues Rectangle setzen, auf das Objekt an sich kommt es nicht an,
> ...



klassisch missachtet, ich schreibe so deutlich dass du x,y nicht kaputtmachen sollst,
denn bei einer Verschieben hier ist x,y ja offensichtlich elementar wichtig,
und du setzt x,y bei jedem paint wieder auf 0..,
in meinem aller ersten Posting hatte ich genau das ja auch als Fehler genannt,

du schaffst es immer weiter mich zu überraschen wie falsch man alles machen kann..

du kannst wie gesagt gerne (entgegen meinen ersten Vorschlag) doch das Rectange überschreiben, 
damit die Breite/ Höhe aktuell übernommen wird,
aber du musst die vorherigen x,y aus dem alten Rectange retten,

verstehst du was diese Worte bedeuten? siehst du einen Unterschied zu x,y auf 0,0 zu setzen?
du musst ja nicht gleich in 3 sec die korrekten Befehle kennen, aber wäre schon schön wenn du wenigstens das Problem erkennst..


----------

