我正在JList中进行自定义渲染。我的自定义ListCellRenderer使用静态字符串,以便它可以对照该变量的先前出现来测试该变量的值。
private static String lastUsername = "";
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
User user = (User)value;
if (lastUsername == user.getUsername()) {
// Do something
} else {
// Do something else
lastUsername = user.getUsername();
}
现在,当程序首次加载时效果很好,但是如果我滚动列表,则会导致问题,因为lastUsername变量仍设置为遇到的最后一个用户名,而实际上它应该是一个空字符串。基本上,在渲染所有单元之前或之后,lastUsername需要重置为空字符串。有人知道我是否可以重写JList post / pre AllCellsRendered事件/挂钩来实现此目的?
最佳答案
比较带有==而不是等于的String对象的常见错误。请尝试使用if (lastUsername.equals( user.getUsername() ))
。