Вопрос по swing, java – Использование переопределения getPreferredSize () вместо использования setPreferredSize () для компонентов фиксированного размера

15

Error: User Rate Limit Exceeded

@Override
public Dimension getPreferredSize() {
    return new Dimension(500, 500);
}

Error: User Rate Limit Exceeded

setPreferredSize(new Dimension(500, 500));

Error: User Rate Limit ExceededDimensionError: User Rate Limit Exceeded

some rules mKorbel
речь идет о программировании на высшем уровне :-), но ругайте будьте советом, как избежать ошибок, никто не говорит там, что использование LayoutManager - легкая работа, требующая а) обучения и попыток, б) задавая несколько вопросов mKorbel
Спасибо за ссылку. Хотя немного странно, что в одной из статей, упомянутых в верхнем ответе, говорится «никогда не используйте этот метод [setPreferredSize] !!!» потому что у меня никогда не было проблем с этим. Но опять же, я никогда не писал действительно большие / сложные пользовательские интерфейсы. IchBinKeinBaum

Ваш Ответ

1   ответ
14

как значение может меняться со временем, и поэтому выбор, который вы выбираете, должен зависеть от того, что вы хотите сделать с кодом.

Если вы просто позвонитеsetPreferredSize(new Dimension(500, 500)); в вашем коде он будет работать так, как вы ожидаете - он устанавливает предпочтительный размер 500x500. Однако другой код в вашем приложении может потенциально перезаписать это значение новым - все, что может вызватьsetPreferredSize() и последний вызов этого метода будет конечным результатом.

Однако, если вы переопределитеgetPreferredSize() метод в вашем коде, это будетalways вернуть 500х500. Не имеет значения, вызывает ли какой-либо ваш кодsetPreferredSize() метод, потому что они эффективно игнорируются. Если вы также переопределитеgetMinimumSize() а такжеgetMaximumSize()Вы можете принудительно установить фиксированный размер компонента, который не должен изменяться независимо от размера окна и других компонентов.

Однако, как упомянул @Andrew Thompson в комментариях, это не гарантируется, так как некоторые менеджеры компоновки могут игнорировать их, особенно если вы пишете свой собственный менеджер компоновки, а добавление пользовательского компонента в некоторые родительские контейнеры также игнорирует эти методы, в зависимости от того, где / как компонент используется. Независимо от этого он все еще более жесткий, чем вызовsetPreferredSize() который может быть легко вызван другим кодом и полностью перезаписан.

Я также отменяюgetPreferredSize() метод (плюсgetMinimumSize() а такжеgetMaximumSize()) для любого из моих пользовательских компонентов, таких как палитра цветов, который должен иметь определенные размеры, чтобы компонент был правильно окрашен. Без переопределения этих методов менеджеры компоновки Swing не понимают, как ваш пользовательский компонент может располагаться и иметь размеры, соответствующие размеруJFrame или жеJPanel.

Спасибо за разъяснение этого. IchBinKeinBaum
Хорошее редактирование. Шум удален. +1
Спасибо @AndrewThompson, да, это правда - я попытался изменить свой ответ, чтобы отразить это лучше. Я хотел, чтобы это был более жесткий способ задания размера компонентов, но это не обязательно гарантировано.

Похожие вопросы