自动滚动和自动选择(GUI问题)时JList变坏

时间:2011-11-11 00:25:50

标签: java swing user-interface scroll jlist

我已经创建了一个检查代理的日志。

此日志显示我,哪个代理已在使用中(通过选择项目)。问题是,当日志是自动滚动和自动选择时,我会得到这样的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 个答案:

答案 0 :(得分:2)

尝试拨打lista.ensureIndexIsVisible(...);内的所有SwingUtilities.invokeLater()。调用重绘时,模型更新可能没有完成。