如下代码中,最下面创建了MyListModel类,
然后前面用JList jl = new JList(new MyListModel()); 创建了JList实例,
但是为什么“JList jl = new JList(new MyListModel());” 这句话就可以创建出一个列表框?
这里面没有调用mylistmodel 的 getElementAt(int x)方法啊
因为mylistmodel里面没有定义无参构造方法,所以不应该在new的时候就自动创建出一个列表框吧?
还是这里有隐藏的无参构造方法?
*********************************
package swing;
import java.awt.*;
import javax.swing.*;
public class JListTest extends JFrame {
public JListTest() {
Container cp = getContentPane();
cp.setLayout(null);
JList jl = new JList(new MyListModel());
JScrollPane js = new JScrollPane(jl);
js.setBounds(100, 100, 200, 200);
cp.add(js);
setTitle("在这个窗体中使用了列表框");
setSize(500, 150);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
new JListTest();
}
}
class MyListModel extends AbstractListModel {
private String[] contents = { "列表1", "列表2", "列表3", "列表4", "列表5", "列表6" };
public Object getElementAt(int x) {
if (x < contents.length)
return contents[x++];
else
return null;
}
public int getSize() {
return contents.length;
}
}
------解决思路----------------------
在JList的构造函数中存在类似这样的代码:
listMode.getElementAt(...);
至于没有定义构造函数,代表使用一个空的无参构造函数。java中所有类一定有构造函数的。