当前位置: 代码迷 >> J2SE >> 关于 listmodel的有关问题
  详细解决方案

关于 listmodel的有关问题

热度:136   发布时间:2016-04-23 19:41:40.0
关于 listmodel的问题
如下代码中,最下面创建了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中所有类一定有构造函数的。