Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JList的setSelectedValue方法存在问题_Java_Jlist - Fatal编程技术网

Java JList的setSelectedValue方法存在问题

Java JList的setSelectedValue方法存在问题,java,jlist,Java,Jlist,我运行应用程序的主类时遇到问题。事实是setSelectedValue方法不起作用。 主类的代码如下所示: DatabaseConnection.getInstance().connect("org.sqlite.JDBC", "jdbc:sqlite:db/Universidad.sqlite"); DatabaseTableManagers managers = DatabaseTableManagers.getInstance(); DataBaseManagerJList.getInst

我运行应用程序的主类时遇到问题。事实是setSelectedValue方法不起作用。 主类的代码如下所示:

DatabaseConnection.getInstance().connect("org.sqlite.JDBC", "jdbc:sqlite:db/Universidad.sqlite");
DatabaseTableManagers managers = DatabaseTableManagers.getInstance();
DataBaseManagerJList.getInstance().setSelectedValue("Alumnos");
system.out.println(DataBaseManagerJList.getInstance().devolver() + "1");
    AlumnosTableManager atm = AlumnosTableManager.getInstance();
    System.out.println(DataBaseManagerJList.getInstance().devolver() + "2");
    CarrerasTableManager ctm = CarrerasTableManager.getInstance();
    System.out.println(DataBaseManagerJList.getInstance().devolver() + "3");
    managers.add(atm);
    System.out.println(DataBaseManagerJList.getInstance().devolver() + "4");
    managers.add(ctm);
    System.out.println(DataBaseManagerJList.getInstance().devolver() + "5");
    DataBaseManagerJFrame dbmf = new DataBaseManagerJFrame();
    System.out.println(DataBaseManagerJList.getInstance().devolver() + "6");
    dbmf.setVisible(true);


}
}

我在console中得到以下结果,结果显示该方法没有设置我输入的默认值: 空1 空值2 空3 空值4 零5 空6

jlist类的代码如下所示: 公共类数据库管理器列表扩展了JPanel {

private static final long serialVersionUID=1L;
私有静态列表;
默认列表模型;
DatabaseTableManager dtm=DatabaseTableManager.getInstance();
私有静态数据库managerjlist实例=null;
公共静态数据库管理器列表getInstance()
{
if(实例==null)
{
实例=新数据库管理器列表();
}
返回实例;
}
公共数据库管理器列表()
{
model=新的DefaultListModel();
ArrayList aux=新的ArrayList(dtm.getTableNames());

对于(int i=0;i,您描述的问题通常意味着在列表中找不到该对象。
setSelectedValue()
方法用于调用
object.equals()
(在您的例子中是
String.equals()
),因此可能的原因是aux中包含的字符串的大写方式与您尝试选择的字符串不同

对于instace
aux
可能包含字符串“alumnos”而不是“alumnos”。如果您不关心大小写,则有两种选择(然后将字符串“alumnos”更改为
aux
中的任何内容)如果您确实关心大小写,但仍然希望使用字符串,则可以简单地创建一个MyString类,该类扩展字符串并重写equals方法,如下所示:

public class MyString extends String {
    @Override
    public boolean equals(Object obj){
        if (obj instanceof String){
            String obj2 = (String)obj;
            return this.equalsIgnoreCase(obj2);
        }
        return false;
    }
}
另一种选择(也许更好)是为列表创建一个包装器对象

public class MyWrapper {
    private String payload;

    public MyWrapper(String payload){
        this.payload = payload;
    }

    @Override
    public String toString(){
        return payload;
    }

    @Override
    public boolean equals(Object obj){
        if (obj instanceof MyWrapper){
            MyWrapper obj2 = (MyWrapper)obj;
            return payload.equalsIgnoreCase(obj2.payload);
        }
        return false;
     }
}

你能把aux里面的东西贴出来吗(大写)
public class MyWrapper {
    private String payload;

    public MyWrapper(String payload){
        this.payload = payload;
    }

    @Override
    public String toString(){
        return payload;
    }

    @Override
    public boolean equals(Object obj){
        if (obj instanceof MyWrapper){
            MyWrapper obj2 = (MyWrapper)obj;
            return payload.equalsIgnoreCase(obj2.payload);
        }
        return false;
     }
}