Хорошо, обо всем по порядку.Ваши звонки на button.getInsets()
и getBorderInsets(button)
идентичны , как вы видели в документации, и подтверждаются источником (внутренне, getInsets()
просто звонит getBorderInsets(this)
в любом случае).
Теперь, когда это не так, по умолчанию JButton
украшен CompoundBorder .Если вы посмотрите на источник , то увидите, что CompoundBorder, используемый для кнопок, состоит из:
- внешняя граница типа
BasicBorders.ButtonBorder
и - внутри границы типа
MarginBorder
.
MarginBorder
, вероятно, представляет интерес для вас здесь.У него есть переопределение для getBorderInsets()
, которое возвращает поля компонента .
Итак, в заключение, граница JButton фактически составлена из ДВУХ границ.Фактические ограничивающие линии снаружи (которые вы обычно рассматривали бы как «границу», заставляя ее выглядеть трехмерной), плюс граница поля внутри.Поэтому, когда вы делаете setMargin()
, вы также воздействуете на внутри части вашей составной границы.
Это объясняет ваш результат:
Вставки кнопокjava.awt.Insets [верх = = 1044 * 103 , слева = 13 , снизу = 13 , справа = 13 ]
Внешние линии имеют ширину 3 px, каждая, а ваше поле ( 100,10,10,10 ) дает указанную выше общую вставку границы.