每天一点儿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);
    }
}

时间: 2024-10-07 17:37:19

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

每天一点儿JAVA之数组篇--一维和多维数组的初始化和基本操作

<span style="font-family: Arial, Helvetica, sans-serif;"> * <p>Description: 演示一维数组和多维数组的初始化和基本操作</p></span> * <p>Copyright: Copyright (c) 2014</p> * <p>Filename: myArray.java</p> * @author w王海涛 * @

每天一点儿JAVA(继承操作)

package prac_1; /** * <p>Title: 树参数</p> * <p>Description: 使用继承类,柳树就是树</p> * <p>Copyright: Copyright (c) 2014</p> * <p>Filename: </p> * @author 王海涛 * @version 0.1 */ class tree { /** *<br>方法说明:树的树根 *<

Maven的使用《二》之依赖、继承、聚合

问题?Maven的使用<二>之依赖.继承.聚合 前面已经讲到了环境的搭建(环境搭建链接),这里就不重复了.下面的主要是对依赖.继承.聚合详细说明. 这里用的编译软件是eclipse,要装maven的插件(下载地址和安装方法:点击下载链接). 然后装完后,这个时候插件已经在Preference里面了,但是插件还不能用,需要我们做一些设置. 一般来说,做到这里就可以用了.但是我在用的过程中会出现这样的一种错误(点击查看链接),经过查询资料,已经得到了很好的解决办法.做下面设置(把jir改成jdk格

我对java中任务取消和线程中断的一点儿理解

在JDK中任务就是一个Runnable或Callable对象,线程是一个Thread对象,任务是运行在某个线程中的.我们知道,让线程死亡的方式有2种:正常完成和未捕获的异常.如果想让任务结束,也只有这2种方式. java中虽然提供了抢占式中断Thread.stop(),但这是很不安全的,JDK早已经将其标记成过时的了.在java中如果想取消一个任务,只能使用中断,中断是一种协作机制.也就是说,如果A线程想中断B线程,那么其实是A向B发送了一个中断请求,至于B到底会不会停止执行,取决于B的实现.如

Java赋值运算符

很多人都知道赋值运算符就是赋值,把左边算出的答案交给右边,但是这是错误的我们不是学数学,我们学的是编程,他的赋值方式刚好相反.Java里面赋值方式是把右边的值交给左边的变量名.比如:int i = 100; 把100这个值交给了 i 变量,i就拿到了这快100的内存空间地址,不懂什么是内存空间地址没关系以后会讲解,你就可以这样理解为 i 就拿到了100. 如果我把i = 1000;呢?那么i 就重新指向了1000的内存空间地址,原来100的内存空间因为没有了引用关系被垃圾处理机制清除掉.如图4.

各种排序算法python和java实现(二)

第一篇博客实现了三种最基本最简单的排序算法,本篇文章将在这三种算法的基础上稍微演变一下. 1.快排 光从名字看就知道速度肯定不差,前一篇讲的冒泡排序,怎么看都不算是一种好的排序算法,里面充斥了太多的无谓的交换动作,时间复杂度倒是很稳定o(n^2),但对于排序算法实在说不过去.快排是冒泡排序的改进版,思路就是分治,将一个序列随机按照某个值分成两个子序列,子序列A里面的值全部比该值大,另一个子序列B的值全部比该值小,这听起来像是二叉排序树.然后依次对子序列进行如上操作,很明显快排最简单的实现就是用递

Java Socket长连接示例代码

SocketListenerPusher.java代码如下: Java代码   import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import ja

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

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性.线程也有就绪.阻塞和运行三种基本状态.就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在

我所认识的java泛型(主要讨论通配符的使用)

在使用java泛型的时候,经常会遇到类似的声明<?extends XXX>或者<? super XXX>,XXX代表一个类或接口.这到底是什么意思呢?今天看了些书有了一点儿体会,不知恰当与否,忘讨论之. 首先需要清楚一个事实,在java中上转型是安全的,下转型是不安全的.例如:String类是Object类的子类,我们可以将String强转为Object但是却不能将Object类强转为一个String,这很明显,因为在String类中包含了Object类没有的方法: 再来看一个事实

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

本文转载地址:             http://www.cnblogs.com/zrtqsk/p/3776328.html 多线程是Java学习的非常重要的方面,是每个Java程序员必须掌握的基本技能.本文只是多线程细节.本质的总结,并无代码例子入门,不适合初学者理解.初学者学习多线程,建议一边看书.看博文,以便写代码尝试. 一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process