2016-07-19 29 views
0

Ich versuche, ein Rechteck in der Mitte eines Jframe zu erstellen. Ich habe es mit Einsätzen versucht, aber ich hatte kein Glück.Zentrieren eines Rechtecks ​​in JFrame

public class RectDraw extends JComponent{ 

    Shape rect; 
    public void paint(Graphics g){ 
     Graphics2D graph2 = (Graphics2D)g; 
     graph2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     rect = new Rectangle2D.Float(50,50,15,15); 


     graph2.setPaint(Color.BLACK); 
     graph2.fill(rect); 
     graph2.draw(rect); 

    } 


} 

Und der Haupt:

public class TheMain{ 


    public static void main(String[] args) { 

     Screen screen = new Screen(); 
     RectDraw rect = new RectDraw(); 
     screen.add(rect, BorderLayout.CENTER); 

} 

Und das ist die Klasse Bildschirm:

public class Screen extends JFrame{ 


    public Screen(){ 
     this.setSize(500, 500); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     this.setLocationRelativeTo(null); 
     this.setResizable(false); 
     this.setTitle("Testing"); 
     this.getContentPane().setBackground(Color.GRAY); 
     this.setVisible(true); 

    } 
} 

Also, was ich ändern, um sollte ich habe die folgende Klasse für das Rechteck gemacht setze dieses Rechteck in die Mitte des Jframes?

Danke!

+3

'(getWidth() - width)/2' wird verwendet, da der' x' Wert von 'Rectangle2D' das Rechteck horizontal zentriert, wenn 'width' als Rechteckbreite verwendet wird. Rate mal, wie du die Höhe zentrieren würdest? –

Antwort

-1

Sie müssen Ihre ScreenpaintComponent Methode überschreiben.

So dass Ihr Rechteck Breite 50 Höhe 100 ist. Einfach etwas Mathe.

@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    Graphics2D graph2 = (Graphics2D)g; 
    //To center the rectangle, we need to specify the center x,y points on the frame 
    //Divide width and height into two, and minus the width and height of the rectangle 
    graph2.drawRect(getWidth()/2 - 50/2, getHeight()/2 - 100/2, 50, 100); 
} 
+2

(1-) 'Sie müssen Ihren Bildschirm übergeben - nein, Sie nicht. Sie erhalten nur die Größe der Komponente mit den Methoden 'getWidth()' und 'getHeight()' der Komponente. Dann machst du Mathe. Außerdem sollten Sie 'paintComponent()' überschreiben, nicht paint(). – camickr