import java.awt.*;
import java.awt.event.*; import javax.swing.*;
import javax.swing.event.*;
/**
* <p>Title: 列表框</p>
* <p>Description: 通过输入框加入元素和点击“删除”按钮删除列表元素</p>
* <p>Copyright: Copyright (c) 2014</p>
* <p>Filename: ListDemo.java</p>
* @author christprince
* @version 0.1
*/
public class ListDemo extends JPanel
implements ListSelectionListener {
private JList list;
private DefaultListModel listModel; private static final String hireString = "Add";
private static final String fireString = "Delete";
private JButton fireButton;
private JTextField employeeName; public ListDemo() {
super(new BorderLayout());
//构建List的列表元素
listModel = new DefaultListModel();
listModel.addElement("0000000000");
listModel.addElement("11111111111111");
listModel.addElement("2222222222");
listModel.addElement("3333333333");
listModel.addElement("4444444444");
listModel.addElement("5555555555"); //创建一个List构件,并将列表元素加入到列表中
list = new JList(listModel);
//设置选择模式为单选
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//初始化选择索引在0的位置。即第一个元素
list.setSelectedIndex(0);
list.addListSelectionListener(this);
//设置列表能够同一时候看5个元素
list.setVisibleRowCount(7);
//给列表加入一个滑动块
JScrollPane listScrollPane = new JScrollPane(list); JButton hireButton = new JButton(hireString);
HireListener hireListener = new HireListener(hireButton);
hireButton.setActionCommand(hireString);
hireButton.addActionListener(hireListener);
hireButton.setEnabled(false); fireButton = new JButton(fireString);
fireButton.setActionCommand(fireString);
fireButton.addActionListener(new FireListener()); employeeName = new JTextField(13);
employeeName.addActionListener(hireListener);
employeeName.getDocument().addDocumentListener(hireListener);
String name = listModel.getElementAt(
list.getSelectedIndex()).toString(); //创建一个面板
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane,
BoxLayout.LINE_AXIS));
buttonPane.add(fireButton);
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(employeeName);
buttonPane.add(hireButton);
buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); add(listScrollPane, BorderLayout.CENTER);
add(buttonPane, BorderLayout.PAGE_END);
}
/**
*<br>类说明:“加入”按钮监听
*<br>类描写叙述:当点击“加入”按钮后。实现将元素加入到列表框中
*/
class FireListener implements ActionListener {
public void actionPerformed(ActionEvent e) { int index = list.getSelectedIndex();
listModel.remove(index); int size = listModel.getSize(); if (size == 0) { //假设没有了选择项,则是“删除”按钮实效
fireButton.setEnabled(false); } else { //选择了一个
if (index == listModel.getSize()) {
//移除选项
index--;
} list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
}
} /**
*<br>类说明:“删除”按钮监听事件
*<br>类描写叙述:实现删除列表元素
*/
class HireListener implements ActionListener, DocumentListener {
private boolean alreadyEnabled = false;
private JButton button; public HireListener(JButton button) {
this.button = button;
} //必须实现 ActionListener.
public void actionPerformed(ActionEvent e) {
String name = employeeName.getText(); //假设输入空或有同名
if (name.equals("") || alreadyInList(name)) {
Toolkit.getDefaultToolkit().beep();
employeeName.requestFocusInWindow();
employeeName.selectAll();
System.out.println("输入数据有误。!!! ! 。");
return;
} int index = list.getSelectedIndex(); //获取选择项
if (index == -1) { //假设没有选择,就插入到第一个
index = 0;
} else { //假设有选择,那么插入到选择项的后面
index++;
} listModel.insertElementAt(employeeName.getText(), index); //又一次设置文本
employeeName.requestFocusInWindow();
employeeName.setText(""); //选择新的元素。并显示出来
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
/**
*<br>方法说明:检測是否在LIST中有重名元素
*<br>输入參数:String name 检測的名字
*<br>返回类型:boolean 布尔值,假设存在返回true
*/ protected boolean alreadyInList(String name) {
return listModel.contains(name);
} /**
*<br>方法说明:实现DocumentListener接口。必需实现的方法
*<br>输入參数:
*<br>返回类型:
*/
public void insertUpdate(DocumentEvent e) {
enableButton();
} /**
*<br>方法说明:实现DocumentListener接口,必需实现的方法
*<br>输入參数:
*<br>返回类型:
*/
public void removeUpdate(DocumentEvent e) {
handleEmptyTextField(e);
} /**
*<br>方法说明:实现DocumentListener接口,必需实现的方法
*<br>输入參数:
*<br>返回类型:
*/
public void changedUpdate(DocumentEvent e) {
if (!handleEmptyTextField(e)) {
enableButton();
}
}
/**
*<br>方法说明:按钮使能
*<br>输入參数:
*<br>返回类型:
*/
private void enableButton() {
if (!alreadyEnabled) {
button.setEnabled(true);
}
}
/**
*<br>方法说明:实现DocumentListener接口,必需实现的方法。改动按钮的状态
*<br>输入參数:
*<br>返回类型:
*/
private boolean handleEmptyTextField(DocumentEvent e) {
if (e.getDocument().getLength() <= 0) {
button.setEnabled(false);
alreadyEnabled = false;
return true;
}
return false;
}
}
/**
*<br>方法说明:实现ListSelectionListener接口,必需实现的方法
*<br>输入參数:
*<br>返回类型:
*/
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) { if (list.getSelectedIndex() == -1) {
fireButton.setEnabled(false); } else {
fireButton.setEnabled(true);
}
}
}
/**
*<br>方法说明:主方法
*<br>输入參数:
*<br>返回类型:
*/
public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); //创建一个窗口
JFrame frame = new JFrame("ListDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //创建一个面版
JComponent newContentPane = new ListDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane); //显示窗口
frame.pack();
frame.setVisible(true);
}
}

每天一点儿Java--list的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  3. 千回百折:百度Java研发offer斩获记和经验分享

    起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...

  4. java从基础知识(十)java多线程(上)

    线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点 ...

  5. java之线程

    java之线程 一:线程: 线程是什么呢?线程,有时被称为轻量级进程是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统 ...

  6. Java Socket长连接示例代码

    SocketListenerPusher.java代码如下: import java.io.IOException; import java.net.InetSocketAddress; import ...

  7. java提高篇(一)-----理解java的三大特性之封装

    从大二接触java开始,到现在也差不多三个年头了.从最基础的HTML.CSS到最后的SSH自己都是一步一个脚印走出来的,其中开心过.失落过.寂寞过.虽然是半道出家但是经过自己的努力也算是完成了“学业” ...

  8. 一位资深开发的个人经历 【转自百度贴吧 java吧 原标题 4年java 3年产品 现在又开始做android了】

    楼主2007年从一家天津的三流大学毕业.毕业前报了一个职位培训,毕业后可以推荐工作.因为推荐的公司都是北京的,所以就来北京了. 找了一个月工作,没有找到要我的,就在出租屋里宅了起来,打着考研的旗号,又 ...

  9. Java多线程总结(一)多线程基础

    多线程是Java学习的非常重要的方面,是每个Java程序员必须掌握的基本技能.本文只是多线程细节.本质的总结,并无代码例子入门,不适合初学者理解.初学者学习多线程,建议一边看书.看博文,以便写代码尝试 ...

  10. 如何理解 Java 中的 <T extends Comparable<? super T>>

    Java 中类似 <T extends Comparable<? super T>> 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到. ...

随机推荐

  1. APIO2018 题解

    坑了好久,补一补. 话说我当时去参加 $APIO2018$ 了,不过纯粹打铁…… 我的程序交道人家毛子的网站上, $c++14$ 编译器不停地给我编 $RE$,只记得好像是结构体排序的问题(删掉那个排 ...

  2. 不支持模块化规范的插件可以使用import 导入的原因

    模块化当中的模块其实是个闭包,然后导出这个闭包,这个是为了解决全局变量污染的问题的. 所以模块当中直接定义的变量 比如  var foo = 0; 这个并不会是全局变量,而是当前模块闭包当中的局部变量 ...

  3. http client transfer

    背景 在平时工作中我偶尔会写一些脚本监控HTTP接口的健康状况,基本上都是发送HTTP GET或HTTP POST请求,然后检测响应内容.但一直用的是WebClient和HttpWebRequest, ...

  4. linux 下共享内存

    一.共享内存相关知识 所谓共享内存,就是多个进程间共同地使用同一段物理内存空间,它是通过将同一段物理内存映射到不同进程的 虚拟空间来实现的.由于映射到不同进程的虚拟空间中,不同进程可以直接使用,不需要 ...

  5. CMake安装或CMake Error at CMakeLists

    CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKE ...

  6. iOS-tableView上拉加载更多后,界面出现偏移

    问题描述: 在做tableview的界面展示的时候,cell用自动计算高度的.但是在上拉加载更多的时候,数据请求完后,刷新界面,界面的顶部就出现了偏移 分析: 查阅资料后发现,当tableView的c ...

  7. 华硕win7安装ubuntu14.04.02注意事项

    一.win7下划出给ubuntu系统的分区 1.win7自带分磁盘的工具,只需要压缩步骤即可,不需要继续分盘符格式化等操作 win7下为绿色 安装时为free space 二.制作启动盘并安装注意事项 ...

  8. BZOJ 1008: [HNOI2008]越狱 组合数学

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 题解: 就很傻逼的组合数学啊... $$ans=M^N-M*(M-1)^{(N-1) ...

  9. Oracle中PL/SQL 范例

    1.写匿名块,输入三角形三个表的长度.在控制台打印三角形的面积 declare v_side_first ):=&第一条边; v_side_second ):=&第二条边; v_sid ...

  10. 管理SQL Server监控

    http://blog.csdn.net/DBA_Huangzj/article/category/1133081 http://www.cnblogs.com/bhtfg538/archive/20 ...