Use a BorderLayout for your window (dialog). Such a layout has 5 regions (as you can see in the tutorial)
at the top (area PAGE_START) you set your top JPanel
in the center (area CENTER) you set your middle JPanel (containing the results table)
at the bottom (area PAGE_END) you set your bottom JPanel
Each of the JPanels you add to your window can have a different layout. If you want the buttons in your bottom JPanel to be in a row, you should use a FlowLayout. If you want a nice looking search form (which will be at the top of your window I guess) you'll need a GridBagLayout. That's one of the more advanced and complex layout managers in Java. I used exactly the same layout managers to create my main window. From my main window class:
Using the solution you proposed in your first reply to this thread. If the window is maximized/made larger, the distance between the jpanels increases. This leads to a large amount of unused space. I have been trying to find a solution whereby, instead of all panels increasing in both width and height, the top and bottom panels only increase in width and the middle panel increases in both width and height. So,
I just ran my application and it shows your desired behaviour. And I didn't do anything different than I described, except for the JTable. When adding this table to the CENTER area I wrapped it in a JScrollPane.