我正在 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 事件/钩子(Hook)我可以重写来实现此目的?
最佳答案
使用 == 而不是 equals 来比较 String 对象的常见错误。尝试使用 if (lastUsername.equals( user.getUsername() ))
代替。
关于java - JList 渲染前/渲染后 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9835961/