我已经创建了一个检查代理的日志。
此日志显示我,哪个代理已在使用中(通过选择项目)。问题是,当日志是自动滚动和自动选择时,我会得到这样的GUI问题(有时最差,有时候会更好):
此外,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();
}
}
答案 0 :(得分:2)
尝试拨打lista.ensureIndexIsVisible(...);
内的所有SwingUtilities.invokeLater()
。调用重绘时,模型更新可能没有完成。