jlist 连接 mysql_Java JList 使用

本文详细介绍了如何在Java中使用JList组件,包括ListModel接口的使用,DefaultListModel与AbstractListModel的区别,以及如何自定义ListModel实现不同的列出模式。通过示例展示了如何创建JList,动态添加和管理项目,同时提到了JList在数据展示和交互中的应用。
摘要由CSDN通过智能技术生成

先看ListModel。

ListModel是一个interface,主要的功能是定义一些方法,让JList或JComboBox这些组件取得每个项目的值,并可限定项目的显示 时机与方式,下面为ListModel这个interface所定义的方法:

ListModel interface定义的方法:

void addListDataListener(ListDataListener l):当data model的长度或内容值有任何改变时,利用此

方法就可以处理ListDataListener的事件。data model是vector或array的数据类型,里面存放List

中的值。

Object getElementAt(int index):返回在index位置的Item值。

int getSize():返回List的长度。

void removeListDataListener(ListDataListener l):删除ListDataListener.

还记得我们一开始在介绍JList时所提到的构造函数吗?其中有一个JList的构造函数是这样的:

JList(ListModel dataModel)

实现JList常用方法:

DefaultListModel m=new DefaultListModel();

for(int i=0;i<10;i++){

m.addElement(...);

}jlist.setModel(m);

因此我们必须实现ListModel所有的方法,才能利用上面这个构造函数建立JList.不过要实现ListModel所有的方法有点麻烦,因 为一般我们不会用到addListDataListener()与removeListDataListener()这两个方法。因此java提供了AbstractListModel这个抽 象类,此抽象类实作了addListDataListener()与removeListDataListener()这两个方法。若我们继承AbstractListModel,就不需 实现这两个方法,只需要实作getElementAt()与getSize()方法即可,我们来看下面的范例:

import java.awt.*;import java.awt.event.*;import javax.swing.*;public classJList3 {publicJList3() {

JFrame f= new JFrame("JList");

Container contentPane=f.getContentPane();/** 由于我们在DataModelodel类中继承AbstractListModel,并实作了getElementAt()与getSize()方法

* ,因此我们可以由DataModel类产生一个ListModel的实体来。*/ListModel mode= newDataModel();

JList list= new JList(mode);//利用ListModel建立一个JList.

list.setVisibleRowCount(5);//设置程序一打开时所能看到的数据项个数。

list.setBorder(BorderFactory.createTitledBorder("你最喜欢到哪个国家玩呢?"));

contentPane.add(newJScrollPane(list));

f.pack();/** 当程序要show出list时,系统会先自动调用getSize()方法,看看这个list长度有多少;然后再调

* 用setVisibleRowCount()方

* 法,看要一次输出几笔数据;最后调用getElementAt()方法,将list中的项目值(item

* )填入list中。读者若还不太清楚,可直接

* 在getSize()与getElementAt()方法中个别加入System.out.println

* ("size");与System.out.println("element")叙述,就可以 在dos

* console清楚看出整个显示list调用的过程。*/f.show();

f.addWindowListener(newWindowAdapter() {public voidwindowClosing(WindowEvent e) {

System.exit(0);

}

});

}public static voidmain(String[] args) {newJList3();

}

}/** 由于我们在下面程序中继承AbstractListModel抽象类,因此我们分别在下面程序中实现了getElementAt()与getSize()方法。*/

class DataModel extendsAbstractListModel {

String[] s= { "美国", "越南", "大陆", "英国", "法国", "大陆", "意大利", "澳洲"};public Object getElementAt(int index) {//getxElementAt()方法中的参数index,系统会自动由0开始计算,不过要自己作累加//的操作.

return (index + 1) + "." + s[index++];

}public intgetSize() {returns.length;

}

}

事实上,java本身还提供另一个类,DefaultListModel实体类。此类继承了AbstractListModel抽象类,并实现里面所有的抽象方 法,因此你不需要再自行实作任何的方法,可以说是相当的方便。不过既然所有的抽象都已经被实现,因此在设计的弹性上就会有 有所降低。若你是喜欢自行管理JList项目的设计者,你可以不要使用DefaultListModel这个类,只需要在AbstractListModel上多 下功夫即可。

下面的例子我们改写上面的例子,直接使用DefaultListModel类:

public classJList4 {publicJList4() {

JFrame f= new JFrame("JList");

Container contentPane=f.getContentPane();

ListModel mode= newDataModel();

JList list= newJList(mode);

list.setVisibleRowCount(5);

list.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢?"));

contentPane.add(newJScrollPane(list));

f.pack();

f.show();

f.addWindowListener(newWindowAdapter() {public voidwindowClosing(WindowEvent e) {

System.exit(0);

}

});

}public static voidmain(String args[]) {newJList4();

}

}/** 使DataModel继承DefaultListModel实体类,因此就不需要再实作getSize()与getElementAt()两个方法,

* 直接将所要的项目用addElementAt()方法加入即可。系统会自动将所加入的项目放入一个Vector对象中,

* 并在输出JList时自动调用getSize()与getElementAt()方法。你可以在DefaultListModel类中找到getSize()与

* getElementAt()两个方法,你可以发现这两个方法已经被实作,不再是抽象方法了。*/

class DataModel extendsDefaultListModel {

String[] s= { "美国", " 日本", "大陆", "英国", "法国", "意大利", "澳洲", "韩国"};

DataModel() {for (int i = 0; i < s.length; i++)

addElement((i+ 1) + "." +s[i]);

}

}

程序运行结果与上个范例相同。

好奇怪,这不是跟我们使用Vector方式,利用JList(Vector v)构造函数来建立新的JList一样吗?如同JList1.java中的例子,为 什么还要多此一举呢?其实若读者去查看DefaultListModel类,可发现此类提供不少好用的方法,例如你可以随意的增加一个项目( addElement())、或是删除一个项目(removeElement)、甚至你可以很方便地做到查询(getElementAt())与汇出(copyInto())项目的 操作。你可以发现,利用DefaultListModel可以直接动态地更改JList的项目值,而不需要自行产生一个Vecotr对象;相对于JList( Vector v)这个构造函数,可说更方便且实用许多.

至于利用ListModel或AbstractListModel来构造JList有什么好处?读者只要这么想,ListModel中文就是“列出模式”,那么每 个老师都会有自己开课的学生成绩,老师应该可以看到每个同学的成绩,而深长应该只能看到自己的成绩,所以我们就会有两种不 同的“列出模式”。我们只需要去改写getElementAt()方法,就会有不同的列出模式产生,如下面的范例:

import java.awt.*;import java.awt.event.*;import javax.swing.*;importjava.util.Vector;public classJList5 {publicJList5() {

JFrame f= new JFrame("JList");

Container contentPane=f.getContentPane();

contentPane.setLayout(new GridLayout(1, 2));

ListModel mode= new DataModel(1);

JList list1= newJList(mode);

list1.setVisibleRowCount(5);

list1.setBorder(BorderFactory.createTitledBorder("您玩过哪些软件?"));

mode= new DataModel(2);

JList list2= newJList(mode);

list2.setBorder(BorderFactory.createTitledBorder("您玩过哪些数据库软件?"));

contentPane.add(newJScrollPane(list1));

contentPane.add(newJScrollPane(list2));

f.pack();

f.show();

f.addWindowListener(newWindowAdapter() {public voidwindowClosing(WindowEvent e) {

System.exit(0);

}

});

}public static voidmain(String args[]) {newJList5();

}

}class DataModel extendsAbstractListModel {

String[] s= { "MS SQL", "MySQL", "IBM DB2", "ORACLE", "Windows 2000","Linux", "UNix", "OS2"};intflag;

DataModel(intflag) {this.flag =flag;

}public Object getElementAt(intindex) {

String tmp= null;if (flag == 1)

tmp= (index + 1) + "." + s[index++];if (flag == 2) {if (index < 4)

tmp= (index + 1) + "." + s[index++];

}returntmp;

}public intgetSize() {returns.length;

}

}

via:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值