Java 从其他类获取JList selectedvalue的最佳方法
我正在制作一个数据库管理器,它向您显示一个包含所有表数据的JTable。想法是在左侧有一个带有表名的JList,您可以在其中选择要可视化的表 所以我有一个类,在这个类中我管理所有的表数据,还有一个类用于JList JList类从JPanel扩展而来,我创建了一个getInstance方法,这样我就可以创建一个JList实例。我还有一个名为getSelectedValue的方法,主要在JTable类中调用该方法来显示所选的表信息 但这样一来,我遇到了问题,我调试了JList构造函数,得到了一个错误,代码如下:Java 从其他类获取JList selectedvalue的最佳方法,java,eclipse,singleton,instance,jlist,Java,Eclipse,Singleton,Instance,Jlist,我正在制作一个数据库管理器,它向您显示一个包含所有表数据的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方法并继续创建新数据库列表时;它会转到构造函数并停止,在更少的时候,这就是我用糟糕的调试知识所看到的。有什么想法吗?谢谢大家, 对我来说似乎很管用。这是我试过的一些小的调整,没有什么大的变化
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);
}
}
离题:让一个静态方法返回一个实例,它被称为单例模式,在这种模式中,您使构造函数私有或受保护,因此类本身无法正常实例化。记住在EDT上放置与Swing相关的事件!