当我运行应用程序的主类时遇到麻烦。事实是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);
}
}
我在控制台中得到以下结果,告诉我该方法没有设置我放置的默认值: NULL1 NULL2 null3 null4 null5 null6
jlist类的代码如下: 公共类DataBaseManagerJList扩展了JPanel {
private static final long serialVersionUID = 1L;
private static JList tablas;
DefaultListModel model;
DatabaseTableManagers dtm = DatabaseTableManagers.getInstance();
private static DataBaseManagerJList instance = null;
public static DataBaseManagerJList getInstance()
{
if (instance == null)
{
instance = new DataBaseManagerJList();
}
return instance;
}
public DataBaseManagerJList()
{
model = new DefaultListModel();
ArrayList<String> aux = new ArrayList<String>(dtm.getTableNames());
for(int i =0;i<aux.size();i++)
{
model.addElement(aux.get(i));
}
tablas = new JList(model);
//tablas.setSelectedValue("Alumnos",true);
add(tablas);
}
public String devolver()
{
return (String) tablas.getSelectedValue();
}
public void setSelectedValue(String name)
{
tablas.setSelectedValue(name, true);
}
}
答案 0 :(得分:0)
您所描述的问题通常意味着在列表中找不到该对象。
setSelectedValue()
方法可以调用object.equals()
(在您的情况下为String.equals()
),因此可能的原因是aux中包含的字符串以与您尝试的字符串不同的方式大写选择。
对于instace aux
可能包含字符串“alumnos”而不是“Alumnos”。如果您不关心大小写(然后将字符串“Alumnos”更改为aux
内的任何内容),如果您关心大写并且您仍然想要使用字符串,那么有两种选择simple创建一个MyString类,它扩展String并覆盖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;
}
}