Это мои наблюдения (использовал 1.6, сейчас я использую 1.7 под XP):
Вы можете иметь неокрашенный кадр «почти» любого размера - я использую разрешение экрана 1280x1024 (повернуто) и не заметил никаких проблем с кадром 1500x1500, хотя некоторые кадры 2000x2000 выглядят незавершенными (но работают) и кадром 4000x4000 показывает большой палец на панели задач, но этот большой палец неактивен, а сама рамка не отображается. Я думаю, что максимально возможный размер неокрашенного JFrame зависит от возможностей системы, которые зависят от графического оборудования.
С декорированными рамками есть простая история - они могут быть немного больше, чем размер экрана (в общем, на несколько пикселей).
В моем приложении с размером, определенным во время выполнения (например, игры, в которых вы динамически устанавливаете размер доски), я использую следующий подход:
1). перед упаковкой установить положение рамки относительно нуля. Он помещает верхний левый угол JFrame в середину экрана (перед упаковкой размер JFrame равен (0,0))
2). установить предпочтительные размеры содержимого моего фрейма (я всегда использую один JPanel) и запомнить их
3). упаковать кадр
4). если размеры кадра после упаковки не совпадают с размерами до того, как пакет располагает рамку, удалите содержимое JPanel, добавьте JScrollPane с этим JPanel и установите предпочтительные размеры JScrollPane в качестве предпочтительных размеров JPanel ПЛЮС фиксированных размеров JScrollBar (т. е. ширины вертикальной полосы прокрутки и высота горизонтальная).
5). упаковать снова - это гарантирует, что появятся только необходимые полосы прокрутки (если вы не увеличите размеры JFrame, то обе полосы прокрутки будут появляться всегда - также необходимо удалить границу JScrollPane по умолчанию).
6). установите новое положение рамки, переместив ее влево и вверх на половину соответствующего размера, чтобы отцентрировать ее.