Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Управление положением скроллбара на JScrollPane 
:(
    Опции темы
bjbj
Дата 11.12.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Мне требуется некий визуальный компонент, предназначенный для вывода лога. События возникают в отдельном потоке и оставляют свои сообщения в этом компоненте. При этом, естественно, логи растут и нужна вертикальная полоса прокрутки. Проблема заключается в том, как заставить полосу прокрутки находится все время в самом нижнем положении, чтобы было видно последнее сообщение лога. Я использую JScrollEditor для непосредственного вывода лога (требуются средства HTML-разметки) и JScrollPane для создания прокрутки.
По идее надо использовать метод JScrollPane.getViewport().setViewPosition(...). Но почему-то это приводит к странному и неустойчивому поведению (полоса прокрутки занимает различные положения, но не всегда самое нижнее). Вот примерный код:

Код

import java.awt.Point;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

public class Test {

    public static void main(String[] args) {
        TestFrame frame = new TestFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}

class TestFrame extends JFrame {

    private JEditorPane logArea;
    private JScrollPane logScrollPane;
    
    public TestFrame() {
        setSize(200, 150);

        logScrollPane = new JScrollPane();
        logScrollPane.setBounds(0, 0, 200, 150);
        
        logArea = new JEditorPane();
        logArea.setContentType("text/html");
        
        logScrollPane.setViewportView(logArea);
        
        getContentPane().add(logScrollPane);
        
        new Thread(new LotLoader()).start();
    }
    
    class LotLoader implements Runnable {

        private String logString = "<html>";
        
        public void run() {
            int i = 0;
            while (!Thread.currentThread().isInterrupted() && i < 20) {
                i++;
                logString += i + "<br>";
                logArea.setText(logString);
                
                logScrollPane.getViewport().setViewPosition(
                        new Point(0, logArea.getHeight() - 150));
                
                try {
                    Thread.currentThread().sleep(500);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        }
        
    }

}


PM MAIL   Вверх
dorogoyIV
Дата 11.12.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

                logScrollPane.getViewport().setViewPosition(
                        new Point(0, logArea.getHeight() - 150));

замени на
Код

                logScrollPane.getViewport().setViewPosition(
                        new Point(0, logArea.getHeight() + 150));

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.