欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java图形用户界面之列表框

程序员文章站 2024-03-12 09:47:44
列表框通过swing组件jlist产生,其总是在屏幕上占据固定行数的空间。如果要得到列表框中被选中的元素,只需调用getselectedvalueslist(),它可以产生...

列表框通过swing组件jlist产生,其总是在屏幕上占据固定行数的空间。如果要得到列表框中被选中的元素,只需调用getselectedvalueslist(),它可以产生一个字符串数组,内容为被选中的元素名称。jlist组件允许多重选择;如果按住ctrl键,可以选中所有点击的元素;如果选中一个元素,按住shift键并单击另一个元素,那么这两个元素之间的所有元素都被选中;要从选中的元素中去掉一个,按住ctrl键单击该元素即可。

初始化列表框后,接着便是向列表框添加和修改内容。分为静态操作和动态操作。

1、静态操作

静态操作便是将所有元素同时添加到jlist中,添加后不能修改,不能删除,即在程序执行过程中不能操作列表框。

e.g.

package test;
import javax.swing.*;
import java.awt.*;
import static net.mindview.util.swingconsole.*;
public class listtest1 extends jframe{
private string[] str = {"monday","tuesday","wednesday","thursday","friday","staturday","sunday"};
private jlist list;public listtest1()
{
list = new jlist(str);
setlayout(new flowlayout());
add(list);
}
public static void main(string[] args)
{
run(new listtest1(),200,100);
}
}

如上例,只要在初始化jlist时将所有元素添加进去即可。

执行结果:列表框不可以被操作。

Java图形用户界面之列表框

2、动态操作

通过查看jlist的方法,可以发现jlist不负责列表框的动态操作,所有的动态操作的细节可以在“列表模型”即defaultlistmodel中完成,只需将该列表模型加入jlist即可。

defaultlistmodel listmodel = new defaultlistmodel();
listmodel.addelement(element1);//添加元素
listmodel.clear();//清除全部元素
listmodel.remove(int index);//清除指定位置的元素

e.g.

package test;
import java.awt.*;import java.awt.event.*;import static net.mindview.util.swingconsole.*;
import javax.swing.*;
import javax.swing.border.border;
import javax.swing.event.listselectionevent;
import javax.swing.event.listselectionlistener;
public class listtest extends jframe{
private string[] str = {"monday","tuesday","wednesday","thursday","friday","staturday","sunday"};
private jbutton button1 = new jbutton("add item"),
button2 = new jbutton("clear item");
private jtextarea text = new jtextarea(str.length,20);
private defaultlistmodel listmodel = new defaultlistmodel();
private jlist list = new jlist(listmodel);
//将列表模型加入jlist,列表模型负责完成动态操作,jlist负责创建列表以及许多其它工作(如多重选择)。
private int count = 0;
private boolean flag = false;
public listtest()
{
text.seteditable(false);//只是用来显示,不能编辑
for(int i = 0;i<4;i++)
{
listmodel.addelement(str[count++]);
}
button1.addactionlistener(new actionlistener(){
public void actionperformed(actionevent e)
{
if(count<str.length)
{
listmodel.addelement(str[count++]);
}else
{
button1.setenabled(flag);
flag = true;
}
}
});
button2.addactionlistener(new actionlistener(){
public void actionperformed(actionevent e)
{
if(count<str.length)
{
count = 0;//列表重新开始添加元素
listmodel.clear();//列表元素清除
text.settext(null);
}else
{
count = 0;
listmodel.clear();
text.settext(null);
button1.setenabled(flag);//启动按钮
}
}
});
list.addlistselectionlistener(new listselectionlistener(){
@suppresswarnings("deprecation")
public void valuechanged(listselectionevent e)
{
if(e.getvalueisadjusting())
return;
//如果检测到事件在更改,则返回true,后面语句不执行;当更改结束后,则返回false,执行后面语句。 for(object item : list.getselectedvalueslist())
{
text.append(item + "\n");//list型对象转换为object
}
//list调用getselectedvalueslist()方法,产生一个字符串数组,内容为被选中的元素名称
}
});
setlayout(new flowlayout());
border border = borderfactory.creatematteborder(1, 1, 2, 2, color.red);//添加边框
list.setborder(border);//设置边框
text.setborder(border);
add(button1);
add(button2);
add(new jscrollpane(text));
add(list);
}
public static void main(string[] args) 
{
run(new listtest(),250,375);
}
}

执行结果:

Java图形用户界面之列表框

在上面的程序中,对jlist的处理过程中用到了jlist所支持的事件listselectionevent的getvalueisadjusting()方法以及jlist的getselectedvalueslist()方法,需要注意这两个方法的用法。

(1)boolean javax.swing.event.listselectionevent.getvalueisadjusting()

返回此事件是否是仍然在更改的多个不同事件之一,如果此事件是仍然在更改的多个不同事件之一,则返回 true。

例如,对于选择被更新以响应一个用户的拖动的事件,那么在拖动开始时,此属性被设置为 true;在拖动结束时被设置为 false。在拖动期间,监听器接收 valueisadjusting 属性设置为 true 的事件。在拖动的最后,当更改终止时,监听器接收一个值设置为 false 的事件。

如果将jlist对象的注册程序去掉更新检测的语句:

if(e.getvalueisadjusting())
return;

输出为:

Java图形用户界面之列表框

可见,没有了更新检测,选中列表框元素后,有重复输出。

(2)list javax.swing.jlist.getselectedvalueslist()

jlist对象调用getselectedvalueslist()方法,产生一个字符串数组,内容为被选中的元素名称。

3、jlist滚动条

jlist本没有对滚动提供直接的支持,我们只要将jlist包装进jscrollpane,它将自动帮助处理所有细节。

总结:jlist想添加元素,可以执行将所有元素在jlist初始化时加入的静态操作,也可以利用“列表模型”defaultlistmodel处理所有列表修改细节的动态操作。

注意:在jlist元素选择的过程中可能会用到更新检测,从而确保程序的稳定性。

以上所述是小编给大家介绍的java图形用户界面之列表框,希望对大家有所帮助