Invisible border in JFrame

Hey everyone, I’ve just started getting into Swing and have encountered a weird problem. I’m trying to get a grid which will expand when left-clicked and retract when right-clicked. This works fine, but the positioning seems strange to me. I want the grid to start from the top-left corner, but it seems like there is some kind of invisible border there. Has anyone else seen this before? I’m sure I’m just making some newbie mistake :slight_smile:


public class GridScroller extends JPanel implements MouseListener{
    public final static String PROG_NAME = "GridScroller";
    public JPanel drawingPane;
    public int clickCounter = 0;
    
    public GridScroller(){
        super(new BorderLayout());
        System.out.println(PROG_NAME + ": constructor entered");
        
        drawingPane = new DrawingPane();
        drawingPane.setBackground(Color.CYAN);
        drawingPane.addMouseListener(this);
        
        JScrollPane scroller = new JScrollPane(drawingPane);
        drawingPane.setLocation(0,0);
        scroller.setPreferredSize(new Dimension(600, 450));
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        add(scroller);
    }
    
    public class DrawingPane extends JPanel{
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            
            for(int i = 0; i < clickCounter; i++){
                for(int j = 0; j < clickCounter; j++){
                    g.setColor(Color.BLACK);
                    g.drawRect(20, 20, i * 20 + 0, j * 20 + 0);
                }
            }
        }
    }

    public void mouseReleased(MouseEvent e){
        //drawingPane.setPreferredSize(new Dimension(drawingPane.getWidth() + 50, drawingPane.getHeight() + 50));
        if(e.getButton() == MouseEvent.BUTTON1){
            clickCounter++;
        }
        if(e.getButton() == MouseEvent.BUTTON3){
            clickCounter--;
        }
        
        drawingPane.setPreferredSize(new Dimension((clickCounter + 2) * 20, (clickCounter + 2) * 20));
        drawingPane.repaint();
        drawingPane.revalidate();
        System.out.println("Mouse event captured");
    }
    
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    
    public static void createAndShowGUI(){
        System.out.println(PROG_NAME + ": createAndShowGUI entered");
        
        JFrame frame = new JFrame("GridScroller");
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JComponent newContentPane = new GridScroller();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);
        newContentPane.setLocation(0,0);
        
        frame.pack();
        frame.setVisible(true);
    }
    
    public static void main(String[] args){
        System.out.println(PROG_NAME + ": main entered");
        
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run(){
                createAndShowGUI();
            }
        });
    }
}

You want the grid to start at (0,0)? If so, then you need to change the X and Y location of g.drawRect(…) to 0,0 instead of 20,20 :wink:

How did I know it would be something stupid like that? lol I got the position and size parameters backwards… >.< thank you

LOL, Glad to help ;D