Объект FlowLayout, похоже, не распознал команду изменения размера. Но когда я использовал метод setColumn, объект FlowLayout реагировал на команду изменения размера. Почему это?
Сформулируйте свой собственный вопрос, я понимаю, что вы знаете, что FlowLayout
работает в соответствии с предпочтительным размером компонента. Однако, чтобы ответить на ваш вопрос, почему на самом деле JTextFeild.setColumn(int)
отвечает: Потому что,
Как только вызывается setColumn(int)
, он делает недействительным() компонент JTextFeild
и все родительские элементы над ним, которые помечаются как требующие размещения.
public void setColumns(int columns) {
int oldVal = this.columns;
if (columns < 0) {
throw new IllegalArgumentException("columns less than zero.");
}
if (columns != oldVal) {
this.columns = columns;
invalidate(); // invalidate if column changes
}
}
Затем при разметке FlowLayout вызывает функцию getPreferredSize()
JTextFeild, которая переопределяется и реализуется таким образом, что она возвращает предпочтительную ширину, добавляя ширину столбца:
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
if (columns != 0) {
Insets insets = getInsets();
size.width = columns * getColumnWidth() +
insets.left + insets.right; // changing the width
}
return size;
}
Угадай, что! Я становлюсь поклонником исходного кода.
person
Sage
schedule
19.10.2013