每天一点儿Java--list
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的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- [高并发]Java高并发编程系列开山篇--线程实现
Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...
- 千回百折:百度Java研发offer斩获记和经验分享
起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...
- java从基础知识(十)java多线程(上)
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点 ...
- java之线程
java之线程 一:线程: 线程是什么呢?线程,有时被称为轻量级进程是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统 ...
- Java Socket长连接示例代码
SocketListenerPusher.java代码如下: import java.io.IOException; import java.net.InetSocketAddress; import ...
- java提高篇(一)-----理解java的三大特性之封装
从大二接触java开始,到现在也差不多三个年头了.从最基础的HTML.CSS到最后的SSH自己都是一步一个脚印走出来的,其中开心过.失落过.寂寞过.虽然是半道出家但是经过自己的努力也算是完成了“学业” ...
- 一位资深开发的个人经历 【转自百度贴吧 java吧 原标题 4年java 3年产品 现在又开始做android了】
楼主2007年从一家天津的三流大学毕业.毕业前报了一个职位培训,毕业后可以推荐工作.因为推荐的公司都是北京的,所以就来北京了. 找了一个月工作,没有找到要我的,就在出租屋里宅了起来,打着考研的旗号,又 ...
- Java多线程总结(一)多线程基础
多线程是Java学习的非常重要的方面,是每个Java程序员必须掌握的基本技能.本文只是多线程细节.本质的总结,并无代码例子入门,不适合初学者理解.初学者学习多线程,建议一边看书.看博文,以便写代码尝试 ...
- 如何理解 Java 中的 <T extends Comparable<? super T>>
Java 中类似 <T extends Comparable<? super T>> 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到. ...
随机推荐
- HDU——1874畅通工程续(Dijkstra与SPFA)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- kubernetes安装kubectl和minikube
安装kubectl命令 curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.10.0/bin/l ...
- 【前端学习笔记】2015-09-02~~~~ 关于filter()匹配的使用
关于filter的使用先记录以下几点: 1.filter(':even')遍历所有元素,找到index为偶数的元素.. ps: filter(':odd') odd----奇数 eve ...
- PHP分页类(较完美)
<?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $lis ...
- 诡异的malloc函数和%S的输出
今天测试代码过程中无意间发现,代码如下: #include <stdio.h> #include <string.h> #include <stdlib.h> #d ...
- 对于Redux的理解
在移动端项目,经常会在不同view中进行传递数据,事件.当事件比较少时,我们可以通过常规的事件流方法,注册,发布事件 进行响应等等.但是项目中一个事件多处响应时候,就会使程序变得相当复杂.在现在的Vu ...
- Yii CDbCriteria的常用方法总结
查看代码 打印 01 $criteria=new CDbCriteria; 02 $criteria->addCondition("id=1");//查询条件,即wher ...
- 腾讯IM的那些坑
项目中接入腾讯IM,在这里记录下,以便大家解决问题时少走弯路 1.首先讲一下IM返回对象的问题: /** * 消息工厂方法 */ public static Message getMessage(TI ...
- 串口VMIN VTIME 详解
原文地址: 以前跟着做过VxWorks的开发,主要通信方式是串口,因为底层BSP包已经做好了,串口通信非常简单.后来接触Linux,在一块OK6410上跑Linux串口通信,才发现原来天真的以为甚是简 ...
- Java原子类及内部原理
一.引入 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作是原子操作.再比如:a++: 这个操作实际是a = a + ...