2012-07-19 41 views
3

我目前正在对莎乐美TMF的项目,所以我下载的代码编译它 我得到这个错误后:接口XXXXX无法实施多次使用不同的参数

The interface ListCellRenderer cannot be implemented more than once with different 
arguments: ListCellRenderer<Object> and ListCellRenderer UserListRenderer.java 

,但我可以完全没有找到问题出在哪里。 这里的类UserListRenderer的代码:

package org.objectweb.salome_tmf.ihm.admin.models; 

import java.awt.Component; 

import javax.swing.DefaultListCellRenderer; 
import javax.swing.Icon; 
import javax.swing.JList; 
import javax.swing.ListCellRenderer; 
import javax.swing.UIManager; 

import org.objectweb.salome_tmf.api.ApiConstants; 
import org.objectweb.salome_tmf.api.Util; 
import org.objectweb.salome_tmf.data.AdminProjectData; 
import org.objectweb.salome_tmf.data.User; 
import org.objectweb.salome_tmf.ihm.IHMConstants; 
import org.objectweb.salome_tmf.ihm.tools.Tools; 


public class UserListRenderer extends DefaultListCellRenderer implements  
ListCellRenderer, ApiConstants , IHMConstants{ 

/** 
* Le s?parateur de fichier 
*/ 
/** 
* M?thode qui red?finit le renderer des ?l?ments de la liste 
* @param list la liste concern?e 
* @param value l'objet dans la liste 
* @param index indice dans la liste 
* @param isSelected si l'objet est s?lectionn? 
* @param cellHasFocus si le focus est sur la cellule 
*/ 
public Component getListCellRendererComponent(JList list, Object value, int index, 
boolean isSelected, 
boolean cellHasFocus) { 
    if (isSelected) { 
     setBackground(list.getSelectionBackground()); 
     setForeground(list.getSelectionForeground()); 
    } 
    else { 
     setBackground(list.getBackground()); 
     setForeground(list.getForeground()); 
    } 
    Icon icon; 
    if (value instanceof User) { 
     icon = Tools.createAppletImageIcon(PATH_TO_ADMIN_ICON,""); 
     setIcon(icon); 
     setText(((User)value).getLoginFromModel() + "/" + 
     ((User)value).getLastNameFromModel() + " " + 
     ((User)value).getFirstNameFromModel()); 
    } else if (value instanceof Icon) { 
     setIcon((Icon)value); 
     setText(""); 
    } else { 
     setIcon(null); 
     setText((value == null) ? "" : value.toString()); 
    } 

    setEnabled(list.isEnabled()); 
    setFont(list.getFont()); 
    setBorder((cellHasFocus) ? UIManager.getBorder("List.focusCellHighlightBorder") : 
    noFocusBorder); 

    return this; 

    } // Fin de la m?thode getListCellRendererComponent/5 
} // Fin de la classe UserListRenderer 

任何帮助将不胜感激

干杯

+2

它看起来是一个矛盾的泛型参数的问题。如果从实施列表中删除ListCellRenderer会怎么样?因为父类DefaultListCellRenderer已经实现了它,所以不需要在接口列表中声明它。 – 2012-07-19 13:26:09

+0

@HovercraftFullOfEels当我删除它的代码现在是正确的,但这会影响应用程序的执行? – 2012-07-19 13:31:17

+0

'“这是否会影响执行......?”否:界面已经被父类关注了。 – 2012-07-19 13:44:21

回答

2

您使用的是Java 6还是Java 7?在Java 7中,接口似乎已被重新设计为采用泛型参数。我建议你先尝试省略implements ListCellRenderer--因为DefaultListCellRenderer已经实现了,所以不需要。

+0

Java 7。谢谢 – 2012-07-19 13:46:15

2

您正试图使UserListRenderer不同T试行的通用接口ListCellRenderer<T>两次。这是不允许的。

+0

我没写这段代码,我不知道如何改变它 – 2012-07-19 13:32:42

+1

从它的外观你应该能够从中删除'ListCellRenderer' '实现'列表,但是如果没有对代码进行更彻底的观察,确实无法确定。 – Keppil 2012-07-19 13:37:07