2011-07-13 10 views
1

アプリケーションのメインクラスを実行すると問題が発生します。実際、setSelectedValueメソッドは機能しません。JListの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); 


} 

}

と私は方法は、私が置かれているデフォルト値を設定しないことを私に示しコンソールで次のような結果を得る: メインクラスのコードは次のとおりです パブリッククラスDataBaseManagerJListのEXT: null5 null6

のJListクラスのコードnull1 null2 null3 null4は以下のとおりです。終了あなたは通常記述されているの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

auxの内部に何かを投稿してください(そのまま大文字で入力してください) – Fido

答えて

0

問題は、オブジェクトがリスト内で見つからなかったことを意味します。 setSelectedValue()メソッドはobject.equals()(あなたの場合はString.equals())への呼び出しを行っているため、考えられる原因はauxに含まれる文字列が選択しようとしている文字列とは異なる方法で大文字に変換されていることです。

auxには、「Alumnos」の代わりに「alumnos」という文字列を含めることができます。これには2つの選択肢があります。大文字小文字を気にせずに文字列を使用する場合は、大文字小文字を気にせず(文字列「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; 
    } 
} 

別の方法(おそらく1よりよいが)あなたのリストのラッパー・オブジェクトを作成することです。

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; 
    } 
} 
関連する問題