JList работает плохо при автоматической прокрутке и автоматическом выборе (проблема с графическим интерфейсом) - PullRequest
2 голосов
/ 11 ноября 2011

Я создал журнал для проверки прокси.

Этот журнал показывает мне, какой прокси уже используется (выбрав пункт).И проблема в том, что когда журнал автоматически прокручивается и выбирается автоматически, я получаю такие проблемы с GUI (иногда худшие, иногда лучше):

enter image description here

Кроме того, изменения в GUI (добавление элементов) делаю из другого потока.

Кто-нибудь может подсказать, как это предотвратить?Код:

class Log extends JScrollPane {
    private JList lista;
    private DefaultListModel modelListy;
    boolean selScroll;

    Log(String opis, boolean selScroll) { 
        super();
        modelListy = new DefaultListModel();
        lista = new JList(modelListy);
        setViewportView(lista);
        setBorder(BorderFactory.createTitledBorder(opis));
        this.selScroll = selScroll;
        setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
        Font displayFont = new Font("Tahoma", Font.BOLD, 10);
        lista.setFont(displayFont);
    }

    void clear() { 
        modelListy.clear();
    }

    void addItem(Object obj) { 
        modelListy.addElement(obj);
        if(!selScroll) {
            lista.ensureIndexIsVisible(modelListy.size()-1);
        }
    }

    void selectItem(int i) {
        lista.setSelectedIndex(i);
        if(selScroll) {
            lista.ensureIndexIsVisible(i+1);
        }
    }

    String getSelectedItem() {
        return (String)lista.getSelectedValue();
    }

    int itemCount() {
        return modelListy.size()-1;
    }

    int getSelectedIndex() {
        return lista.getSelectedIndex();
    }
}

1 Ответ

2 голосов
/ 11 ноября 2011

Попробуйте позвонить всем lista.ensureIndexIsVisible(...); внутри SwingUtilities.invokeLater(). Возможно, что обновление модели не было завершено, когда вызывается перерисовка.

...