Search code examples
javaswingpaintcomponent

I am trying to draw the line in the middle. I tried different coordinates


enter image description hereHere is my paintComponent which contains the coordinates

public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g; 
        g2.drawLine(-100,0,500,0);
        g2.drawLine(141,-500,141,500);
        g2.translate(getWidth()/2.0, getHeight()/2.0);
        g2.scale(1,-1);
        g2.rotate(45*Math.PI/180);
        Rectangle2D r = new Rectangle2D.Double(0,0,100,100);
        g2.fill(r);

Output


Solution

  • It's a bit of a cheat, but...

    Origin

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g.create();
        g2.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
        g2.drawLine(0, getHeight() / 2, getWidth(), getHeight()/ 2);
        g2.translate(getWidth() / 2.0, (getHeight() / 2.0));
        g2.scale(1, -1);
        g2.rotate(45 * Math.PI / 180);
        Rectangle2D r = new Rectangle2D.Double(-50, -50, 100, 100);
        g2.fill(r);
        g2.dispose();
    }
    

    Basically, the origin point is now the center of the screen, so in order to draw the rectangle "centered" around the origin point, you need to adjust the x/y accordingly

    Now, you also adjust the origin point by 50x50 instead, but then you'd need to change the anchor point around which the Graphics context is rotated to the center of the box

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g.create();
        g2.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
        g2.drawLine(0, getHeight() / 2, getWidth(), getHeight()/ 2);
        g2.translate((getWidth() / 2.0) - 50, (getHeight() / 2.0) - 50);
        g2.scale(1, -1);
        g2.rotate(45 * Math.PI / 180, 50, 50);
        Rectangle2D r = new Rectangle2D.Double(0, 0, 100, 100);
        g2.fill(r);
        g2.dispose();
    }