【发布时间】:2011-06-21 18:01:34
【问题描述】:
我正在制作一个数据库管理器,它会向您显示一个包含所有表数据的 JTable。想法是在左侧有一个带有表名的 JList,您可以在其中选择要可视化的表。
所以我有一个类来管理所有表数据,所以还有一个用于 JList。
JList 类从 JPanel 扩展而来,我创建了一个 getInstance() 方法,因此我可以只创建一个 JList 实例。我还有一个方法叫getSelectedValue(),主要是在JTable类中调用,用来显示选中的表信息。
但是这种方式我遇到了问题,我调试并在 JList 构造函数中得到一个错误,这里是代码:
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 方法并继续创建“new DatabaseJList();”时它进入构造函数并停止,以我糟糕的调试知识所看到的更少。有任何想法吗?谢谢大家;)
【问题讨论】:
-
题外话:让静态方法返回单个实例,它被称为单例模式,在这种模式下,您将构造函数设为私有(或受保护),因此类本身无法正常实例化。跨度>
标签: java eclipse singleton instance jlist