2011-06-21 20 views
0

我正在製作一個數據庫管理器,它向您顯示一個包含所有表數據的JTable。這些想法是在左側有一個JList和表名,您可以在其中選擇要顯示的表。從另一個類獲得JList selectedvalue的最佳方式

所以我有一個類,我管理所有的表數據,所以,另一個JList。

JList類從JPanel擴展而來,我創建了一個getInstance()方法,這樣我就可以創建一個JList實例。我還有一個名爲getSelectedValue()的方法,它主要在JTable類中調用以顯示選定的表信息。

可是這樣一來我有問題,我調試,我得到在JList中構造一個錯誤,在這裏OS代碼:

public class DatabaseJList extends JPanel { 

private static DatabaseJList instance = null; 
private static DefaultListModel listModel = new DefaultListModel(); 
private static JList list; 

    public DatabaseJList() { 
    setLayout(new BorderLayout()); 
    model = new DefaultListModel(); 

    list = new JList(model); 
    JScrollPane pane = new JScrollPane(list); 

    Vector<String> vector = new Vector(DatabaseTableManagers.getInstance().getTableNames()); 
    for(int i=0; i<vector.size() ; i ++) 
    { 
     String string = vector.elementAt(i); 

     model.addElement(string); 

    } 


    add(pane, BorderLayout.NORTH); 

    } 

public Object getSelectedObject() { 
    return list.getSelectedValue(); 

} 
public void setSelectedObject(String str) 
{ 
    list.setSelectedValue(str, true); 
} 



public static DatabaseJList getInstance() 
{ 
    if (instance == null) 
    { 
     instance = new DatabaseJList(); 
    } 
    return instance; 

} 

當getInstance方法被調用一次,並繼續進行「新的DatabaseJList();」它進入構造函數並停下來,在那些我看不到的調試知識的情況下就停下來了。有任何想法嗎?謝謝大家;)

+1

題外話:具有靜態方法返回一個實例,它被稱爲一個單例模式,並在這一點,你使構造私人(或保護)。類本身不能正常實例化。 –

回答

0

似乎適合我工作。這是我試過(一些小的調整,沒有什麼激烈的)

public class DatabaseJList extends JPanel { 

    private static DatabaseJList instance = null; 
    private static DefaultListModel listModel = new DefaultListModel(); 
    private static JList list; 

    public DatabaseJList() { 
     setLayout(new BorderLayout()); 
     DefaultListModel model = new DefaultListModel(); 

     list = new JList(model); 
     JScrollPane pane = new JScrollPane(list); 

     Vector<String> vector = new Vector<String>(); 
     vector.add("test1"); 
     vector.add("test2"); 
     for (int i = 0; i < vector.size(); i++) { 
      String string = vector.elementAt(i); 

      model.addElement(string); 

     } 

     add(pane, BorderLayout.NORTH); 
    } 

    public Object getSelectedObject() { 
     return list.getSelectedValue(); 

    } 

    public void setSelectedObject(String str) { 
     list.setSelectedValue(str, true); 
    } 

    public static DatabaseJList getInstance() { 
     if (instance == null) { 
      instance = new DatabaseJList(); 
     } 
     return instance; 

    } 

    public static void main(String a[]) 
    { 
     DatabaseJList list = DatabaseJList.getInstance(); 
     JFrame frame = new JFrame(); 
     frame.setSize(300,300); 
     frame.getContentPane().add(list); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

    } 
} 
+0

請記得在「EDT」上放置與Swing相關的活動! – mre