You are trying to draw the trucks and cars outside their own bounds. You think they will fit because of the call to setBounds, but the layout manager (GridLayout) ignores that and sets new bounds based on the frame size and number of vehicles.
purpose of program: randomly spawns 10 vehicle in random positions.(cars or trucks)
Your custom painting is wrong. For example you set the size of your Car to be (80, 55). But then you randomly generate x/y to be between 100/300. So if x/y are (100, 300) then the painting of your cars is done outside the bounds of your Car. Instead your Car painting should always be done from (0, 0). Then to position your cars on the parent panel you use the setLocation(x, y) of the Car.
The code should be something like:
only one vehicle will show up.
Another problem is that panels are opaque, which means that you can't see through the panel so all the panels will paint on top of one another.
Instead try extending JComponent. By default a JComponent doesn't paint a background so you should be able to see all Vehicles separately.