带数据输入校验 、长度的JTextField

带数据输入校验 、长度的JTextField
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

import org.apache.commons.lang.StringUtils;

import com.sf.framework.i18n.Messages;
import com.sf.module.pcss.core.message.MessageManager;

/**
 * 可配置长度输入框</p>  
 * 输入长度 控制,默认最大输入100</p>
 * @author luojialin
 * @since 2014-2-24
 */
public class SFTextField extends JTextField {
	private static final long serialVersionUID = 1547141437224361583L;

	/**
	 * 最大输入数
	 */
	private int defaultMaxChar = 100;
	
	/**
	 * 最小输入数据长度
	 */
	private int defaultMinChar = 0;
	
	/**
	 * 自定义输入约束
	 */
	private String restrict ="";
	
	
	private String defaultinputtype = "ignore";	
	/**
	 *任意输入 
	 */
	public static String IGNORE = "ignore";
	/**
	 * 大写、小写输入
	 */
	public static String LETTER = "letter";
	/**
	 * 数字
	 */
	public static String NUMBER = "number";
	/**
	 * 数字 字母 输入
	 */
	public static String NUMBER_LETTER = "number_letter";
	
	
	public SFTextField(){
		
		initMenuItem();
		this.addKeyListener(new KeyAdapter(){
			
			public void keyTyped(KeyEvent e) { 
				if(defaultinputtype.equals(SFTextField.NUMBER)){
					String numStr = "0123456789." + (char) 8;
		            if (numStr.indexOf(e.getKeyChar()) < 0) {
		                e.consume();
		            }
				}
				else if(defaultinputtype.equals(SFTextField.NUMBER_LETTER)){
					String str = "0123456789ABCDEFGHIZKLMNOPQRSTUVWXYZabcdefghizklmnopqrstuvwxyz";
					if (str.indexOf(e.getKeyChar()) < 0) {
		                e.consume();
		            }
				}
				else if(defaultinputtype.equals(SFTextField.LETTER)){
					String str = "ABCDEFGHIZKLMNOPQRSTUVWXYZabcdefghizklmnopqrstuvwxyz";
					if (str.indexOf(e.getKeyChar()) < 0) {
		                e.consume();
		            }
				}
				
				int ch = e.getKeyChar();
				
				//1:ctrl+A  3:ctrl+C   22:ctrl+V
				if(ch == 1 || ch == 3|| ch == 22){
					
				}else{
					boolean isall = isSelectAll();
					if(isall){
						clear();
					}
				}
				
				if (getText().trim().length() >= defaultMaxChar){
					e.consume();
				}
				
				if(getText().trim().length() < defaultMinChar){
					MessageManager.getInstance().error("",Messages.getString("error.minchar.length")+defaultMinChar);				
				}
			}
		});
	}
	
	/**
	 * 判断文本框是否为全选状态
	 */
	public boolean isSelectAll(){
		String seltext = getSelectedText();
		String text = getText();
		if(seltext != null && seltext.equals(text)){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * 清除文本框数据
	 */
	public void clear(){
		setText(StringUtils.EMPTY);
	}

	/**
	 * 获取最大的输入长度
	 * @return
	 */
	public int getDefaultMaxChar() {
		return defaultMaxChar;
	}


	/**
	 * 设置只能输入的最大长度
	 * @param defaultMaxChar
	 */
	public void setDefaultMaxChar(int defaultMaxChar) {
		this.defaultMaxChar = defaultMaxChar;
	}




	public String getDefaultinputtype() {
		return defaultinputtype;
	}


	public void setDefaultinputtype(String defaultinputtype) {
		this.defaultinputtype = defaultinputtype;
	}


	/**
	 * 获取输入约束
	 * @return
	 */
	public String getRestrict() {
		return restrict;
	}


	/**
	 * 设置输入约束
	 * @param restrict
	 */
	public void setRestrict(String restrict) {
		this.restrict = restrict;
	}


	public int getDefaultMinChar() {
		return defaultMinChar;
	}


	public void setDefaultMinChar(int defaultMinChar) {
		this.defaultMinChar = defaultMinChar;
	}
	
	
	// 右键菜单
		private JPopupMenu pop;
		// 弹出菜单
		private JMenuItem copy = null, paste = null, cut = null ,selectAll = null; // 三个功能菜单

		private void initMenuItem() {
			pop = new JPopupMenu();
			pop.add(copy = new JMenuItem("复制"));
			pop.add(paste = new JMenuItem("粘贴"));
			pop.add(cut = new JMenuItem("剪切"));
			pop.add(selectAll = new JMenuItem("全选"));
			copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));
			paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));
			cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));
			selectAll.setAccelerator(KeyStroke.getKeyStroke('A', InputEvent.CTRL_MASK));
			copy.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					menuAction(1);
				}
			});
			paste.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					menuAction(2);
				}
			});
			cut.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					menuAction(3);
				}
			});
			selectAll.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					menuAction(4);
				}
			});
			this.add(pop);
			this.addMouseListener(new MouseAdapter() {
				@Override
				public void mousePressed(MouseEvent e) {
					if (e.getButton() == MouseEvent.BUTTON3) {
						menuPop(e.getX(), e.getY());
					}
				}
			});
		}

		/**
		 * 菜单动作
		 * 
		 * @param type
		 */
		private void menuAction(int type) {
			if (type == 1)
				this.copy();
			else if (type == 2)
				this.paste();
			else if (type == 3)
				this.cut();
			else if (type == 4){
				this.selectAll();
			}
		}

		
		
		/**
		 * 弹出右键菜单
		 * 
		 * @param x
		 * @param y
		 */
		private void menuPop(int x, int y) {
			copy.setEnabled(isCanCopy());
			paste.setEnabled(isClipboardString() && this.isEnabled()
					&& this.isEditable());
			cut.setEnabled(isCanCopy() && this.isEnabled() && this.isEditable());
			pop.show(this, x, y);
		}

		/**
		 * 剪切板中是否有文本数据可供粘贴
		 * 
		 * @return true
		 */
		private boolean isClipboardString() {
			Clipboard clipboard = this.getToolkit().getSystemClipboard();
			Transferable content = clipboard.getContents(this);
			try {
				if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {
					return true;
				}
			} catch (Exception e) {
			}
			return false;
		}

		/**
		 * 文本组件中是否具备复制的条件
		 * 
		 * @return true为具备
		 */
		private boolean isCanCopy() {
			int start = this.getSelectionStart();
			int end = this.getSelectionEnd();
			return start != end;
		}
	
	
}
  JTextArea  
import java.awt.Font;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.im.InputMethodRequests;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class SFTextArea extends JTextArea {
	private static final long serialVersionUID = -7624053424295389747L;

	public SFTextArea(int rows, int columns) {
		super(rows,columns);
		this.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		initMenuItem();
	}
	
	public SFTextArea() {
		super();
		this.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		initMenuItem();
	}

	@Override
	public InputMethodRequests getInputMethodRequests() {
		return null;
	}

	// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
	// 右键菜单
	private JPopupMenu pop;
	// 弹出菜单
	private JMenuItem copy = null, paste = null, cut = null,selectAll = null; // 三个功能菜单

	private void initMenuItem() {
		pop = new JPopupMenu();
		pop.add(copy = new JMenuItem("复制"));
		pop.add(paste = new JMenuItem("粘贴"));
		pop.add(cut = new JMenuItem("剪切"));
		pop.add(selectAll = new JMenuItem("全选"));
		copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));
		paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));
		cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));
		selectAll.setAccelerator(KeyStroke.getKeyStroke('A', InputEvent.CTRL_MASK));
		copy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				menuAction(1);
			}
		});
		paste.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				menuAction(2);
			}
		});
		cut.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				menuAction(3);
			}
		});
		selectAll.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				menuAction(4);
			}
		});
		this.add(pop);
		this.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {
				if (e.getButton() == MouseEvent.BUTTON3) {
					menuPop(e.getX(), e.getY());
				}
			}
		});
	}

	/**
	 * 菜单动作
	 * 
	 * @param type
	 */
	private void menuAction(int type) {
		if (type == 1)
			this.copy();
		else if (type == 2)
			this.paste();
		else if (type == 3)
			this.cut();
		else if (type == 4){
			this.selectAll();
		}
	}

	/**
	 * 弹出右键菜单
	 * 
	 * @param x
	 * @param y
	 */
	private void menuPop(int x, int y) {
		copy.setEnabled(isCanCopy());
		paste.setEnabled(isClipboardString() && this.isEnabled()
				&& this.isEditable());
		cut.setEnabled(isCanCopy() && this.isEnabled() && this.isEditable());
		pop.show(this, x, y);
	}

	/**
	 * 剪切板中是否有文本数据可供粘贴
	 * 
	 * @return true
	 */
	private boolean isClipboardString() {
		Clipboard clipboard = this.getToolkit().getSystemClipboard();
		Transferable content = clipboard.getContents(this);
		try {
			if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {
				return true;
			}
		} catch (Exception e) {
		}
		return false;
	}

	/**
	 * 文本组件中是否具备复制的条件
	 * 
	 * @return true为具备
	 */
	private boolean isCanCopy() {
		int start = this.getSelectionStart();
		int end = this.getSelectionEnd();
		return start != end;
	}
}
 

猜你喜欢

转载自gxblluojialin.iteye.com/blog/2021587