I am not clear about what is the difference between
pack() on a window will size it based on the preferredSize of its containing components. It will be as small as possible but taking into account the preferredSize and layout of its components.
If you just randomly use
frame.setSize(), then the components added to the content pane will expand/contract to fit the space available, which means the preferred size of each component may be overridden.
setSize() sets the size of the component and
setPreferredSize sets the preferred size.The Layoutmanager will try to arrange that much space for your component.
It depends on whether you're using a layout manager or not ...