У меня JTable в JScrollPane, и таблица получает новые строки данных каждый раз. В конце концов, есть больше строк данных, чем может отображаться сразу, и поэтому ScrollPane запускается. Я хочу, чтобы панель прокрутки прыгала вниз (до максимального значения) каждый раз при добавлении новых данных, поэтому я написал это, что вызывается сразу после добавления новой строки:
jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());
Он работает достаточно хорошо, но есть problem-. Он не прокручивается до полного дна. Он всегда оставляет один ряд таблицы, который вам нужно вручную прокрутить вниз, чтобы достичь полного дна.
Мое подозрение в том, что новый ряд данных каким-то образом добавляется только после завершения метода (он активируется после нажатия JButton и активации метода actionPerformed).
Как это исправить?
вам нужно поставить его в очередь в конце текущих событий обработки, используя SwingUtilities.invokeLater; это будет выглядеть так:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());
}
}
);
иначе будет выполняться во время текущего события и произойдет до фактического обновления.
не забудьте сделать их переменными final, чтобы передать их в анонимный внутренний класс