Java JList的setSelectedValue方法存在问题
我运行应用程序的主类时遇到问题。事实是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
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中包含的字符串的大写方式与您尝试选择的字符串不同
对于instaceaux
可能包含字符串“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;
}
}