Я понимаю, что этот вопрос был задан более года назад, но, как и я, я думал, что многие наткнутся на это сообщение на форуме и останутся без попыток сделать обходной путь, подобный тому, который был предложен в отчете об ошибке (мне не удалось просток вашему сведению).
В любом случае, есть лучший ответ, начиная с JDK 1.6.Flowlayout имеет следующий метод:
public void setAlignOnBaseline(boolean alignOnBaseline)
Если вы используете этот метод для вашего flowlayout и установите для него значение true, то, когда flowlayout размещает компоненты, он будет проверять базовую линию каждого компонента и выравнивать компонент по этой базовой линии.
Но это еще не все, что вам нужно сделать.
Рассматриваемый компонент должен переопределить следующие два метода следующим образом:
@Override
public Component.BaselineResizeBehavior getBaselineResizeBehavior() {
return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
}
@Override
public int getBaseline(int width, int height) {
return 0;
}
Это методы в JComponent икомпоновщики и менеджеры компоновки используют эти методы для определения компоновки компонента.
Если вы выполните шаги, упомянутые выше, все компоненты выровняются вдоль верхней части каждой строки.Конечно, если вы просто хотите использовать такой компонент, как JButton, вам, очевидно, придется расширить его, чтобы достичь желаемой цели ... но это не такая большая работа, как переопределение layoutcontainer с обходным решением, которое вы должны отлаживать.По крайней мере, я так думаю.
Удачи, -Асаф