Я могу найти множество вопросов, посвященных вопросу о том, как получить «реальный» размер JFrame, не считая его границы, но это другое: у меня есть JFrame с некоторым содержимым , и я хочу установить минимальный размер JFrame, чтобы его область содержимого не могла быть меньше размера этих содержимого. Просто делать что-то вродеУстановить минимальный размер рамки в зависимости от размера содержимого
setMinimumSize(getContentPane().getPreferredSize())
не работает, конечно, потому что размер фрейма включает в свои границы, любую строку меню и т.д. - так что вы все еще быть в состоянии сжать рамку вниз достаточно мало, что часть содержимого обрезается. Так я пришел к этому решению, вместо:
// Set minimum size so we can't resize smaller and hide some of our
// contents. Our insets are only available after the first call to
// pack(), and the second call is needed in case we're too small.
pack();
Dimension contentSize = getContentPane().getPreferredSize();
Insets insets = getInsets();
Dimension minSize = new Dimension(
contentSize.width + insets.left + insets.right,
contentSize.height + insets.top + insets.bottom +
(getJMenuBar() != null ? getJMenuBar().getSize().height : 0));
setMinimumSize(minSize);
pack();
Это, кажется, работает, но он чувствует себя очень Hacky, в частности, в предположении, что единственное возможное пространство, выделенное для украшения будет принято во внимание через вставки и а потенциальная панель меню (которая влияет только на высоту). Конечно, есть лучшее решение, верно?
Если нет, то, надеюсь, в следующий раз, когда у кого-то возникнет эта проблема, они смогут найти мое решение. :)
'frame.pack()' it. – winterfox