Хорошо, я нашел простое решение. Поместите JTextPane в центр JPanel с макетом Border. Затем поместите JPanel в JScrollPane.
Итак, иерархия выглядит так:
- JScrollPane
- JPanel (с макетом границы)
- JTextPane
JScrollPane содержит все, что находится под ним, а JTextPane находится внутри всего, что находится под ним.
Я не уверен, почему это работает, но это работает.