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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| 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){ 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(); } }); } } |