带数据输入校验 、长度的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;
}
}