The size of components like JButtons are dependant on what the layoutmanager tells them to do. There a a bunch of different rules that the layout manager follows, so unless I knew more about what you were doing I can't be very specific, but I will say this. If you put a single button with an image onto a JFrame and set the JFrame size to say (100,100), then the JButton would fill the whole frame. But if you used JFrame.pack() method then the JButton gets to use all of its preferred sizes and takes the size of the image and then the frame "packs" (automatically sizes) around the button.