java图形用户界面之列表框
列表框通过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时将所有元素添加进去即可。
执行结果:列表框不可以被操作。

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);
}
}
执行结果:

在上面的程序中,对JList的处理过程中用到了JList所支持的事件ListSelectionEvent的getValueIsAdjusting()方法以及JList的getSelectedValuesList()方法,需要注意这两个方法的用法。
(1)Boolean javax.swing.event.ListSelectionEvent.getValueIsAdjusting()
返回此事件是否是仍然在更改的多个不同事件之一,如果此事件是仍然在更改的多个不同事件之一,则返回 true。
例如,对于选择被更新以响应一个用户的拖动的事件,那么在拖动开始时,此属性被设置为 true;在拖动结束时被设置为 false。在拖动期间,监听器接收 valueIsAdjusting 属性设置为 true 的事件。在拖动的最后,当更改终止时,监听器接收一个值设置为 false 的事件。
如果将JList对象的注册程序去掉更新检测的语句:
if(e.getValueIsAdjusting())
return;
输出为:

可见,没有了更新检测,选中列表框元素后,有重复输出。
(2)List javax.swing.JList.getSelectedValuesList()
JList对象调用getSelectedValuesList()方法,产生一个字符串数组,内容为被选中的元素名称。
3、JList滚动条
JList本没有对滚动提供直接的支持,我们只要将JList包装进JScrollPane,它将自动帮助处理所有细节。
总结:JList想添加元素,可以执行将所有元素在JList初始化时加入的静态操作,也可以利用“列表模型”DefaultListModel处理所有列表修改细节的动态操作。
注意:在JList元素选择的过程中可能会用到更新检测,从而确保程序的稳定性。
java图形用户界面之列表框的更多相关文章
- Java——列表框:JList
import java.awt.Container; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import j ...
- java在线聊天项目1.3版 ——设计好友列表框功能
设计好友列表框功能,思路—— 1.当客户端成功登陆后,则客户端把成功登陆信息发送给服务端, 2.由服务端将接收到来自各个成功登陆的客户端的用户信息添加进好友列表, 3.每当有成功登陆的用户就向各个客户 ...
- Java Swing编程接口(30)---列表框:JList
列表框同时可以在信息呈现给用户的列表多个选项,使用JList能够建立一个列表框. package com.beyole.util; import java.awt.Container; import ...
- Java开发笔记(一百三十一)Swing的列表框
前面介绍了选择框的用法,当时为了方便用户勾勾点点,无论是复选框还是单选按钮,统统把所有选项都摆在界面上.倘若只有两三个选项还好办,要是选项数量变多比如超过五个,这么多的选择框一齐在界面罗列,不光程序员 ...
- java界面编程(9) ------ 列表框
本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 列表框和JComboBox组合框明显不同,这不不过体如今外观上. 当激活JCom ...
- JPasswordField密码框,JList列表框
[JPasswordField密码框] //导入Java类 import javax.swing.*; import java.awt.*; import java.awt.event.ActionE ...
- 下拉列表JComboBox,列表框JList
1.下拉列表JComboBox public class Demo extends JFrame { public Demo() { setBounds(100, 100, 200, 100); se ...
- Spring MVC-表单(Form)标签-列表框(Listbox)示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_listbox.htm 说明:示例基于Spring MVC 4.1.6. 以下示例 ...
- Java-GUI 编程之 JList、JComboBox实现列表框
目录 JList.JComboBox实现列表框 简单列表框 不强制存储列表项的ListModel和ComboBoxModel 强制存储列表项的DefaultListModel和DefaultCombo ...
随机推荐
- execvp php-fpm reload使用的函数
php重启 本质上是调用 execvp("/usr/local/php/sbin/php-fpm"); execvp就是用一个新的进程把自己替换掉,一个进程一旦调用exec类函数, ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- U8API——向U8数据库表导入数据
一.打开API资源管理器 替换两个引用 打开应用实例,选择相应的功能 复制相应的封装类到自己的目录下 在数据库新建临时表,与目标表相同 数据导入: 思路:先将要导入的数据导入到与U8目标表相同的临时表 ...
- linux下mysql主从复制搭建
目标:搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,实现主从复制 环境: 主数据库: 192.168.1.1 从数据库: 192.168.1.2 mysql安装可参考:https:// ...
- hive算法报错..
hive普通语句查询报错.. 查到以下设定项,,附加在语句前执行成功.. 但是有可能没有真正的执行.. 试到最后使用标红的三行附加在语法前执行成功 set hive.execution.engine= ...
- (转)Linux中的位图
原文:https://www.jianshu.com/p/74626c2d2916 什么是位图 位图(bitmap)的定义 维基百科中关于位图的介绍: 一种数据结构,代表了有限域中的稠集(dense ...
- 使用spring EL表达式+自定义切面封装缓存模块
需求是这样的,业务代码需要使用到缓存功能以减少数据库压力,使用redis来实现,并且需要生成缓存的key由方法的传参拼接而成(貌似也只能这样才能保证同样的select查询可以使用缓存),简单的方式就是 ...
- 利用wget配合bash脚本同时下载多个文件
先把需要下载的文件写入到一个文件中,命名为urls.txt,比如: http://blog.is36.com/a.jpg http://blog.is36.com/b.jpg http://blog. ...
- 隐型马尔科夫模型(HMM) 简介
先介绍一下马尔科夫模型: 马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域.经过长期发展,尤其是在语音识别中的成 ...
- getCurrentSession 与 openSession() 的区别
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...