2011-07-12 13 views
0

JListクラスに問題があります。私は、JListを満たすためにベクトルからデータを取得しています。画面に表示すると、リストは正常に表示されます。リストにはテーブル名が含まれ、選択されたテーブルは表示されるテーブルです。したがって、proyect構造体はListのgetSelectedValue()に基づいています。最初にプログラムgetSelectedValueがnullを返したので、setSelectedValue( "Alumnos"、true)を使って自分自身で変更を試みました。これを取得します。 スレッド "main" java.lang.NullPointerExceptionの例外 interfaz.DataBaseManagerJList.setSelectedValue (DataBaseManagerJList.java:53)JLISTのsetSelectedValueメソッドのエラー

Alumnosはリストに表示されているので意味がありません。 JListのクラスコードは次のとおりです。

public class DataBaseManagerJList extends 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)); 
     System.out.println(aux.get(i)); 
    } 
    JList 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); 
} 


} 

みんなありがとう:)

+2

あなたは[The Brilliant Paula Bean]のポーラですか(http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx)ですか? :D – Jacob

答えて

2

代わり

tablas = new JList(model); 

あなたは地元のインスタンスを作成しますが、その後セッターでクラスフィールドを使用し、書き込み

JList tablas = new JList(model); 

の。

3

あなたのモデルの文字列には、選択しようとしている文字列とスペースやその他の違いがあると思います。値をハードコーディングする代わりに。モデルから最初の項目を選択してみてください。例:

JList tablas = new JList(model);  
tablas.setSelectedValue(aux.get(0), true); 
add(tablas); 

このようにして、値がモデル内にあることが保証されます。 (リストが空ではないと仮定します)。

もう1つの利点は、Alumnosはもはやハードコード化されていないので、リスト内のオプションではない場合、それを選択するコードを変更する必要はありません。