Rectangle on JPanel zentrieren

plammy

Bekanntes Mitglied
Hallo :) Ich versuche vergeblich ein Rectangle auf mein JPanel zu zentrieren .. ich habe so versucht

Java:
public void paintComponent(Graphics g) {
        
        Rectangle headerRect = new Rectangle(editPanel.getWidth()/2,editPanel.getHeight()/2,500,500);    
        g.setColor(new Color(230,227,224)); //gray
        g.fill3DRect(headerRect.x, headerRect.y, headerRect.width, headerRect.height,true);
        g.setColor(new Color(211,111,53)); //orange


aber das funktioniert nur mit Rectangle2D... Jemand ne Idee??
 

XHelp

Top Contributor
Was heißt "das funktioniert nur mit Rectangle2D?
Aber du zentrierst das ganze nicht, sondern fängst bei der Mitte an, versuche es mal mit:
Java:
Rectangle headerRect = new Rectangle(editPanel.getWidth()/2-250,editPanel.getHeight()/2-250,500,500);
 

Marco13

Top Contributor
Was funktioniert mit Rectangle2D? ???:L

int w = 500;
int h = 500;
Rectangle headerRect = new Rectangle(editPanel.getWidth()/2-w/2,editPanel.getHeight()/2-h/2,w,h);


EDIT: XHelp mal wieder... ich räume das Feld und überlasse das Antworten den jungen, ausgeschlafenen... :( ;)
 

plammy

Bekanntes Mitglied
Super danke es funktioniert , aaber .. :)... wenn ich jetzt mehrere rectangles untereinander anhängen möchte verschiebt sich die ganze Struktur aus Rectangles nicht im Zentrum sondern einfach weiter und weiter runter... Sprich nur der erste Rectangle ist vertical zentriert .. Gibt es eine Funktion mit dem man das ganze immer zentriert und jedes einzelnen..Ich habs glaube ich schlecht erklärt... am besten siehe Photo..

Java:
 public void paintComponent(Graphics g) {
        
        int centerX = editPanel.getWidth()/2;       
        int centerY = editPanel.getHeight()/2;

//header
        Rectangle headerRect = new Rectangle(centerX-500/2,centerY-100/2,500,100);    
        g.setColor(new Color(230,227,224));
        g.fill3DRect(headerRect.x, headerRect.y, headerRect.width, headerRect.height,true);
 
        
 
        //content
        Rectangle contentRect = new Rectangle(centerX-500/2,centerY+100/2,500,300);
        g.setColor(new Color(230,27,224));
        g.fill3DRect(contentRect.x, contentRect.y, contentRect.width, contentRect.height,true);
        
    
        //footer
        Rectangle footerRect = new Rectangle(centerX-500/2,centerY+100/2+300,500,90);
        g.setColor(new Color(20,227,224));
        g.fill3DRect(footerRect.x, footerRect.y, footerRect.width, footerRect.height,true);
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    19,6 KB · Aufrufe: 25
Zuletzt bearbeitet:

Marco13

Top Contributor
Ich kapier das ja nicht ganz. Das ist Mathematik der 6. oder 7. Klasse :noe: Du musst ausrechnen, wie groß die Rechtecke insgesamt sind, und dieses "große" Rechteck dann zentrieren. Den Code können dir die jungen vorkauen ;)
 

plammy

Bekanntes Mitglied
Sry versteh ich nicht wie du das meinst.. zuammenrechenen kriege ich schon hin aber wie soll ich den rectangles zusammenrechenen??

headerRect+contentRect+footerRect;

das geht doch so nicht
 

XHelp

Top Contributor
Vlt solltest du mal versuchen die HÖHE der Rectangles zusammenzurechnene :bahnhof:
Darüber hinaus noch ein gedanke: je nach dem was du machen willst könnte es sinnvoller sein einfach nur 3 Pannels hinzuzufügen und einen geeigneten LayoutManager sich um das Layout kümmern zu lassen.
 

plammy

Bekanntes Mitglied
geht auch nicht mit der Höhe :( .. außerdem müssen die schon als einzelne rectangles bleiben da später verschiedene sachen dynamisch noch darin gemalen werden sollen.. Und die größen sollen nicht so fest sein sondern immer von userinput ausgelesen werden ... Geht nicht iwie mit translate() easier
 

XHelp

Top Contributor
"iwie" wird das nicht wirklich "easier": du willst es nach Höhe zentrieren also brauchst du die gesamte Höhe.
Nimm dir doch ein Blatt Papier und zeichne da genau so die 3 Rechtecke zentriert hin um das Vorgehen zu verstehen.
 

Marco13

Top Contributor
Beschreib' halt mal genauer, was du eigentlich vorhast. Wenn IN die Rectangles was reingemalt werden soll (was nicht irgendeine "Sprite" ist), könnte es ohnehin einfacher sein, dort keine Rectangles sondern JPanels zu verwenden, aber ... wer weiß das schon...
 

plammy

Bekanntes Mitglied
also...ich hab ein editPanel wo man durch nutzereingaben so was wie webseitenlayout erstellen kann... (header, content, footer-size der seite)..das sind quasi die 3 rechtecke die ich immer durch userinput auf dem editPanel erstellen werden sollen und da das der webseite-layout darstellen soll immer auch zentriert auf dem editPanel... demweiteren soll es auch 2 felder geben wo man auch breite und höte eingeben kann und dadurch ein neues rechteckt erscheint, den man aber mit der mouse iwo auf den pinken Recheck positionieren kann..(also dynamische Position), diese weiteren rechtecken muss man nicht zentrieren
 

plammy

Bekanntes Mitglied
wenn man nur so zahlen eingibt ist ja kein ding aber mit unterschiedlichen userinputs jedes mal zeichnet der auch jedes mal war anderes ... :((( .... Ich kriegst iwie nicht hin ..mein Kopf platzt gleich..

Java:
headerW = Integer.parseInt(headerWidth.getText());
headerH = Integer.parseInt(headerHeight.getText());
contentW = Integer.parseInt(contentWidth.getText());
contentH = Integer.parseInt(contentHeight.getText());
footerW = Integer.parseInt(footerWidth.getText());
footerH = Integer.parseInt(footerHeight.getText()); 

 public void paintComponent(Graphics g) {
        
        int centerX = editPanel.getWidth()/2;     
        int centerY = editPanel.getHeight()/2;       

        //header
        Rectangle headerRect = new Rectangle(centerX-headerW/2,centerY-headerH/2-contentH/2-footerH/2,headerW,headerH);  
       
        g.fill3DRect(headerRect.x, headerRect.y, headerRect.width, headerRect.height,true);
        
       
        //content
        Rectangle contentRect = new Rectangle(centerX-contentW/2,centerY-contentH/2,contentW,contentH);
       
        g.fill3DRect(contentRect.x, contentRect.y, contentRect.width, contentRect.height,true);
        
        
        //footer
        Rectangle footerRect = new Rectangle(centerX-footerW/2,centerY-footerH/2,footerW,footerH);
 
        g.fill3DRect(footerRect.x, footerRect.y, footerRect.width, footerRect.height,true);
 

XHelp

Top Contributor
Nach wie vor gilt: nimm ein Blatt Papier und rechne dir Werte per Hand durch, dann wird dir vlt schon auffallen, wo der Fehler ist.
 

Marco13

Top Contributor
Wenn der Bildschirm 300 Pixel hoch ist, und die Rechtecke
Header 50 Pixel
Center 100 Pixel
Footer 50 Pixel
hoch sind, sind es insgesamt 200 Pixel. Also sind oben und unten noch 50 Pixel übrig. Also fängt man bei y=50 an den Header zu malen, malt dann bei y+headerHöhe das Center, dann bei y+headerHöhe+centerHöhe den Footer.... Wenn du das Problem genauer beschreibst, kann man vielleicht auch genauer helfen, ansonsten hilft nur ein Link auf Grundrechenart ? Wikipedia :bahnhof:
 

plammy

Bekanntes Mitglied
cool super danke so ist das auf jeden fall klar geworden :):applaus:
man versucht immer viel komplizierter zu denken als es eigentlich ist :)
 

plammy

Bekanntes Mitglied
was ich jetzt versuche ist auch spannend :D .. nachdem ich diese 3 Rectecke mal dank ein Button gezeichnet habe will ich mit einem anderen Button noch 3 dazuzeichnen (also wenn die erwünscht sind)..
ich habe mir gedachte das kann man mit der Methode translate() ganz gut machen.. z.B. bei erstellen einen neuen Rechteck der über alle andere sein sollneu die sratposition errechenen (editPanel - (neuen Rechteck + summe der anderen) /2) das klappt auch.. die bestehenden sollen sich aber jetzt nach unten verschieben und zwar genau so viel wie die Höhe der neuen Rechteck sind sonst überlappen die sich ja ..ich hab folgendes versucht aber iwie sehe ichkeine Auswirkung und weiß nicht wieso nicht???

Java:
 int beginPositionNeu = (editPanel.getHeight()-(headerH + contentH+ footerH+neuH))/2;


        //neu
        Rectangle neuRect = new Rectangle(centerX-headerW/2,beginPositionNeu,neuW,neuH);
        g.setColor(new Color(211,111,53));  
        g.fill3DRect( neuRect.x,  neuRect.y,  neuRect.width,  neuRect.height,true);
        headerRect.translate(0,neuH);
        contentRect.translate(0,neuH);
        footerRect.translate(0,neuH);
 

plammy

Bekanntes Mitglied
zu "Wie alt bist du" : was spielt das denn für eine Rolle???
zu "Wofür machst du das": ich hab das als Projekt um JAVA zu lernen
zu "Was ist das Ziel letztendlich": Das Programm soll halt 3 feste Rechtecke zeichnen können. Noch 3 die sich an spezielle Stellen später wenn man die erstellt auch an bestimmten Stellen positionieren.Man sollte aber noch die Möglichkeit haben ein Rechteck zu erstellen und den mit der Mouse da zu plazieren, wo man will also keine fest vogegebene Position.


P.S: ich habs geschafft mit meinem Alter... funktioniert...
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Wenn du merkst, dass das Projekt zu schwer für dich ist, dann geh doch paar Schritte zurück. Zumal du ohnehin noch starke Probleme mit der Maus-Bewegung bekommen wirst.
Und die Frage nach dem Alter könnte vermutlich folgendes bedeuten: du weißt jetzt wie du 3 Rechtecke zentriert darstellen kannst: du errechnest die Summe der Höhen, ziehst es aus der Höhe des Panels ab und teils durch 2 - das ist dann deine Startposition.
Und jetzt hast du plötzlich 6 Rechtecke... hmm... du errechnest die Summe der Höhen, ziehst es aus der Höhe des Panels ab und teils durch 2 - das ist dann deine Startposition.
 

Marco13

Top Contributor
Die Fragen zielten alle darauf ab, besser abschätzen zu können, wie man die Fragen beantworten soll. Wenn der gepostete Code (mit dem translate) in der paintComponent steht, werden die Rechtecke bei jedem Zeichnen transliert, was sicher nicht das Ziel ist. Und ansonsten gehe ich davon aus, dass einen Schritt zurück zu gehen und sich eine Struktur zu überlegen, für das, WAS das Ziel ist, hilfreicher sein drüfte, als sich durch eine Mischung aus Fragen und Probieren an spezifischen Punkten irgendwas zusammenzufrickeln. Aber vielleicht ist das ja nicht so wichtig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was genau bewirkt Rectangle in 2dGraphics? AWT, Swing, JavaFX & SWT 1
R AWT Rectangle mit Angle AWT, Swing, JavaFX & SWT 10
K 2048 Umsetzung mit Gridpane / Stackpane und / Rectangle AWT, Swing, JavaFX & SWT 0
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
U JavaFX GridPane - Circle auf Rectangle versetzten AWT, Swing, JavaFX & SWT 1
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
L JavaFX Rectangle mit Dock-Mechanismus AWT, Swing, JavaFX & SWT 3
K JavaFX TableView mit Rectangle AWT, Swing, JavaFX & SWT 3
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
J Rectangle g.fillRec() X/Y Punkt AWT, Swing, JavaFX & SWT 5
TheSorm Rectangle drehen AWT, Swing, JavaFX & SWT 9
S Rectangle Border Color AWT, Swing, JavaFX & SWT 13
P drawString in einem Rectangle AWT, Swing, JavaFX & SWT 4
P Rectangle verschieben AWT, Swing, JavaFX & SWT 11
P ImageIcon auf Rectangle AWT, Swing, JavaFX & SWT 3
O 2D-Grafik Rectangle mit double Werten zeichnen AWT, Swing, JavaFX & SWT 3
T Rectangle Namen geben? Alternativen auch gerne gesehen. AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Form der GrafikObjekte ändern, Ellipse -> Rectangle AWT, Swing, JavaFX & SWT 2
K AWT Rectangle klappt nicht AWT, Swing, JavaFX & SWT 7
R Resize Rectangle Problem AWT, Swing, JavaFX & SWT 3
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
I Text innerhalb von Rectangle rendern AWT, Swing, JavaFX & SWT 3
H Rectangle[] ? AWT, Swing, JavaFX & SWT 5
I Rectangle mit floating values AWT, Swing, JavaFX & SWT 2
D Markieren mit Rectangle ? AWT, Swing, JavaFX & SWT 9
T PLAF MetalButtonUI Rectangle beseitigen AWT, Swing, JavaFX & SWT 4
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
kilopack15 JPanel im laufenden Zustand einfärben AWT, Swing, JavaFX & SWT 2
kilopack15 JPanel Farbverwaltung AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
D Von JPanel auf anderes JPanel zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben