Java 如何在swing组件(对于combobox)的类中使用toString两次?

Java 如何在swing组件(对于combobox)的类中使用toString两次?,java,eclipse,swing,combobox,tostring,Java,Eclipse,Swing,Combobox,Tostring,我知道错了,这是我的密码。我有两种卡基和Vari组合。我正在重写这两个变量 public class Ucuslar { private String KalkisYeri; private String VarisYeri; @Override public String toString() { return KalkisYeri; } public String toString(){ return Varis

我知道错了,这是我的密码。我有两种卡基和Vari组合。我正在重写这两个变量

public class Ucuslar {
    private String KalkisYeri;
    private String VarisYeri;
    @Override
    public String toString() {
        return KalkisYeri;
    }
    public String toString(){
        return VarisYeri;
    }
}   
如何在swing Components上的类中使用toString 2两次 组合框

java不允许这样做,重写意味着您要编写超类或接口提供的方法的自定义实现

您需要的可以/必须通过另一种方式完成,您可以为这两个变量定义getter

class Ucuslar {
    private String KalkisYeri;
    private String VarisYeri;

    public String getKalkisString() {
        return KalkisYeri;
    }
    public String getVarisString(){
        return VarisYeri;
    }
}   
如何在swing Components上的类中使用toString 2两次 组合框

java不允许这样做,重写意味着您要编写超类或接口提供的方法的自定义实现

您需要的可以/必须通过另一种方式完成,您可以为这两个变量定义getter

class Ucuslar {
    private String KalkisYeri;
    private String VarisYeri;

    public String getKalkisString() {
        return KalkisYeri;
    }
    public String getVarisString(){
        return VarisYeri;
    }
}   

基本答案是,不能用相同的签名实现两个方法

对这个问题的较长回答围绕着需求。您可以将对象分为两个对象,每个属性一个,然后可以覆盖每个属性的toString

另一个解决方案是实现一个自定义ListCellRenders,它可以被设计为显示对象的一个属性,例如

public class Ucuslar {

    private String KalkisYeri;
    private String VarisYeri;

    public String getKalkisYeri() {
        return KalkisYeri;
    }

    public String getVarisYeri() {
        return VarisYeri;
    }

}

public class UcuslarListCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        if (value instanceof Ucuslar) {
            configure((Ucuslar)value);
        }
        return this;
    }

    protected void configure(Ucuslar value) {

    }

}

public class KalkisYeriListCellRenderer extends UcuslarListCellRenderer {

    protected void configure(Ucuslar value) {
        setText(value.getKalkisYeri());
    }

}

public class VarisYeriListCellRenderer extends UcuslarListCellRenderer {

    protected void configure(Ucuslar value) {
        setText(value.getKalkisYeri());
    }

}

有关更多详细信息,请参见。基本答案是,不能使用相同的签名实现两个方法

对这个问题的较长回答围绕着需求。您可以将对象分为两个对象,每个属性一个,然后可以覆盖每个属性的toString

另一个解决方案是实现一个自定义ListCellRenders,它可以被设计为显示对象的一个属性,例如

public class Ucuslar {

    private String KalkisYeri;
    private String VarisYeri;

    public String getKalkisYeri() {
        return KalkisYeri;
    }

    public String getVarisYeri() {
        return VarisYeri;
    }

}

public class UcuslarListCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        if (value instanceof Ucuslar) {
            configure((Ucuslar)value);
        }
        return this;
    }

    protected void configure(Ucuslar value) {

    }

}

public class KalkisYeriListCellRenderer extends UcuslarListCellRenderer {

    protected void configure(Ucuslar value) {
        setText(value.getKalkisYeri());
    }

}

public class VarisYeriListCellRenderer extends UcuslarListCellRenderer {

    protected void configure(Ucuslar value) {
        setText(value.getKalkisYeri());
    }

}

有关更多详细信息,请参见

您的意思是,该代码未编译!!您想做什么?您不需要重写每个变量的toString。对于类you can't,它只做了一次,这是我不建议为此使用它的众多原因中的一个,将它留给字符串进行调试。相反,您需要提供一个ListCellRenderer,根据您想要显示它的方式来格式化值。我想两次应用到String my fields VarisYeri和kalkisyeriUse getters:public String getKalkisYeri{return KalkisYeri;}和String getVarisYeri{return VarisYeri;}这是什么意思,代码没有编译!!您想做什么?您不需要重写每个变量的toString。对于类you can't,它只做了一次,这是我不建议为此使用它的众多原因中的一个,将它留给字符串进行调试。相反,您需要提供一个ListCellRenderer,根据您希望显示iti的方式来格式化值。我希望两次应用到字符串my FieldsArisyeri和kalkisyeriUse getters:public String getKalkisYeri{return KalkisYeri;}和String getVarisYeri{return VarisYeri;}