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. BZOJ-2049 [SDOI2008]洞穴勘测

    LCT模版题.... #include <cstdlib> #include <cstdio> #include <cstring> #include <al ...

  2. BZOJ2653 middle 【二分 + 主席树】

    题目 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个 长度为n的序列s.回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c ...

  3. for语句执行顺序

    for语句的结构如下所示: for(初始化;条件;调整) { 示例语句; } 第一次顺序:初始化 ->条件->示例语句 第二次顺序:调整->条件->示例语句 第三次顺序:调整- ...

  4. P3285 松鼠的新家 (树链剖分)

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...

  5. setsockopt等高级使用

    参考: setsockopt函数使用http://hi.baidu.com/yelangdefendou/item/74161d0f384abd3c4ac4a316http://blog.csdn.n ...

  6. 前端开发 CSS中你所不知道的伪类与伪元素的区别--摘抄

    做过前端开发的人都熟悉伪类与伪元素,而真正能够彻底了解这二者的区别的人并不多.伪类与伪元素确实很容易混淆. 伪元素主要是用来创建一些不存在原有dom结构树种的元素,例如:用::before和::aft ...

  7. hdu 5444(构造二叉树然后遍历)

    Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  8. python装饰器的深度探究

    1.讲装饰器一般讲到这种代码就可以了,但这篇博客会介绍更多: def deco(func): def wrapper(): print("start") func() #调用函数 ...

  9. POJ 2253 Frogger Floyd

    原题链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  10. Deep learning with PyTorch: A 60 minute blitz _note(1) Tensors

    Tensors 1. construst matrix 2. addition 3. slice from __future__ import print_function import torch ...