funky-nd
funky-nd

Reputation: 709

How can I move my panels from (0,0) coordinates

as you see, 5x5 window is contiguous to 0,0 coordinates. I want to move them like 10,10. How can I do it ?

enter image description here

I think the problem is in my BorderLayout. North and East is freee. How can i fill them with 10,10 dimension

import java.awt.*;
import javax.swing.*;

public class Main {

public static void main(String[] args) {

    SOS game = new SOS(5);

    // JPanel for sos template
    SOSCanvas window = new SOSCanvas(game); 

    // JPanel which includes info panel, time and exit panel
    SOSGUIPanel info = new SOSGUIPanel(window, "Cihangir", "Mercan"); 

    JFrame jf = new JFrame();

    jf.setTitle( "SOS game");
    jf.setSize(340, 450);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setLocationRelativeTo(null);

    jf.setLayout( new BorderLayout() );
    jf.add(window, BorderLayout.CENTER ); 
    jf.add(info, BorderLayout.SOUTH );

}

}

The grid is provided with this class;

import java.awt.*;
import javax.swing.*;


public class SOSCanvas extends JPanel {

// PROPERTIES

protected SOS game;


// CONSTRUCTORS

public SOSCanvas( SOS game )
{
    this.game= game;                
}

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    int dimension = game.getDimension();

    g.drawRect (0, 0, 300, 300);    

    // drawing horizontal lines
    for ( int i = 1; i < dimension; i++ )
    {
        g.drawLine(0, i * (300 / dimension), 300, i * (300 / dimension) );
    }

    // drawing vertical lines
    for ( int i = 1; i < dimension; i++ )
    {
        g.drawLine( i * (300 / dimension), 0, i * (300 / dimension), 300);
    }
}

}

Upvotes: 0

Views: 188

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347314

The first thing you need to do, is stop relying on magic numbers, you need to know the current size of the component.

Instead of using g.drawRect (0, 0, 300, 300);, you need to get the component's current width and height. From this you can make decisions about how you might handle the differences in your expectations and the actual width and height of the component.

For example, the following is a scalable grid, which can grow and shrink based on the available space, but will always remain square. It will always attempt to center itself within the available space as well...

public class SOSCanvas extends JPanel {

    public SOSCanvas() {
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int dimension = 5;//game.getDimension();

        int width = getWidth() - 1;
        int height = getHeight() - 1;

        int cellSize = Math.min(width, height);
        int xOffset = (width - cellSize) / 2;
        int yOffset = (height - cellSize) / 2;

        g.drawRect(xOffset, yOffset, cellSize, cellSize);

        // drawing horizontal lines
        for (int i = 1; i < dimension; i++) {
            g.drawLine(
                            xOffset, 
                            yOffset + (i * (cellSize / dimension)), 
                            xOffset + cellSize, 
                            yOffset + (i * (cellSize / dimension)));
        }

        // drawing vertical lines
        for (int i = 1; i < dimension; i++) {
            g.drawLine(
                            xOffset + (i * (cellSize / dimension)), 
                            yOffset, 
                            xOffset + (i * (cellSize / dimension)), 
                            yOffset + cellSize);
        }
    }

}

Even if you wanted a static grid of (lets say) 300x300, the x offset you would need to center the grid horizontally would be calculated using something like xOffset = (getWidth() - 300) / 2, then all you horizontal drawing would need to start from this offset...

Upvotes: 1

Related Questions