java中对列表的添加或删除操作

DocumentListener 监听机制,常常用来对文本的监听,也就三种方法

/**
 *方法说明:实现DocumentListener接口,必需实现的方法,对文本输入时会调用
 */
        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();
            }
        }

附送一个小例子:

import javax.swing.*;
import javax.swing.event.*;

public class Main extends JPanel 
{
	JTextField jtf=new JTextField(10);
	
	public Main()
	{
		jtf.getDocument().addDocumentListener(new Example());
		add(jtf);
	}
	public static void main(String []args)
	{
		Main m=new Main();
		JFrame jf=new JFrame();
		jf.add(m);
		jf.setVisible(true);
		jf.pack();
	}
}

class Example implements DocumentListener
{
	@Override
	public void insertUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		System.out.println("write");
	}

	@Override
	public void removeUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		System.out.println("remove");
	}

	@Override
	public void changedUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		System.out.println("change");
	}
}





再送一个大例子:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Main extends JPanel implements ListSelectionListener 
{
    private JList list;
    private DefaultListModel listModel;

    private static final String hireString = "添加";
    private static final String fireString = "删除";
    private JButton fireButton;
    private JTextField employeeName;

    public Main() 	
    {
        super(new BorderLayout());
        //构建List的列表元素
        listModel = new DefaultListModel();
        listModel.addElement("Alan Sommerer");
        listModel.addElement("Alison Huml");
        listModel.addElement("Kathy Walrath");
        listModel.addElement("Lisa Friendly");
        listModel.addElement("Mary Campione");
        listModel.addElement("Sharon Zakhour");

        //创建一个List构件,并将列表元素添加到列表中
        list = new JList(listModel);
        //设置选择模式为单选
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        //初始化选择索引在0的位置,即第一个元素
        list.setSelectedIndex(0);
        list.addListSelectionListener(this);
        //设置列表可以同时看5个元素
        list.setVisibleRowCount(5);
        //给列表添加一个滑动块
        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(10);
        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();
                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("Main");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //创建一个面版
        JComponent newContentPane = new Main();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);

        //显示窗体
        frame.pack();
        frame.setVisible(true);
    }
}


发布了334 篇原创文章 · 获赞 37 · 访问量 31万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览