в основном это то, что я хочу сделать:
У меня есть два отдельных JTextAreas в двух отдельных JScrollPanes, и я хочу их объединить, поэтому, когда текст будет длинным для первого TextArea, его следует продолжить на втором. Но это также должно работать с прокруткой: если я прокручиваю первую TextArea, вторая должна прокручиваться вместе с ней (и наоборот). Я попытался рассчитать максимальное количество отображаемых строк, чтобы знать, сколько строк видно. Я нашел это:
public void paint(Graphics g) {
super.paint(g);
final FontMetrics fontMetrics = g.getFontMetrics();
// get width of any char (font is monospaced)
final int charWidth = fontMetrics.charWidth('M');
final int charHeight = fontMetrics.getHeight();
final int prefWidth = this.getPreferredSize().width;
// get height of Parent (JScrollPane)
final int prefHeight = this.getParent().getHeight();
int maxChars = prefWidth/charWidth;
int maxLines = prefHeight/charHeight;
}
но метод getParent().getHeight()
не работает, потому что я устанавливаю размер компонентов с помощью своего LayoutManager (SpringLayout, и я просто определяю ограничения для установки размера компонентов, что я считаю лучшим методом для фиксированных пропорций компонентов, даже после изменения размера окна.Поправьте меня, если я ошибаюсь, после нескольких часов попыток использования различных LayoutManagers (которые все плохие и уродливые), у меня нет мотивации думать об этом дальше). Таким образом, метод getHeight()
все время возвращает 0
, потому что я никогда не устанавливаю размер.
Существуют ли какие-либо другие методы для получения видимых строк TextArea, вложенных в ScrollPane? Или я совершенно не прав здесь, и это должно быть как-то по-другому?
Спасибо за помощь.