有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从另一个类获取JList selectedvalue的最佳方法

我正在制作一个数据库管理器,它向您显示一个包含所有表数据的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();”时它会转到构造函数并停止,在更少的时候,这就是我用糟糕的调试知识所看到的。有什么想法吗?谢谢大家;)


共 (1) 个答案

  1. # 1 楼答案

    对我来说似乎很好。以下是我尝试过的(一些小的调整,没有激烈的变化)

    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);
    
        }
    }