2016-01-29 3 views
0

Я могу найти множество вопросов, посвященных вопросу о том, как получить «реальный» размер 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, в частности, в предположении, что единственное возможное пространство, выделенное для украшения будет принято во внимание через вставки и а потенциальная панель меню (которая влияет только на высоту). Конечно, есть лучшее решение, верно?

Если нет, то, надеюсь, в следующий раз, когда у кого-то возникнет эта проблема, они смогут найти мое решение. :)

+1

'frame.pack()' it. – winterfox

ответ

5

Минимальный размер, который вы хотите, это просто размер рамки ПОСЛЕ того, как вы делаете начальный пакет();

frame.pack(); 
frame.setMinimumSize(frame.getSize()); 
+0

Теперь почему я об этом не подумал? Гораздо лучше, чем мое решение. – chris

Смежные вопросы