- 浏览: 29581 次
- 性别:
- 来自: 深圳
文章分类
最新评论
带数据输入校验 、长度的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; } }
发表评论
-
morangtest
2014-07-21 18:38 0morangtestmorangtestmorangtestm ... -
下拉框自定义
2014-04-01 15:13 382自定义下拉组件 import java.util.Arra ... -
时间组件
2014-04-01 15:08 1040单时间组件 import java.awt.Dimensi ... -
在窗口中添加全局热键
2014-03-11 19:30 683在窗口中添加全局热键 Toolkit toolkit ... -
系统消息框
2014-03-08 17:07 333系统消息弹出框实现方式 一种: import java ... -
在SWING、SWT中嵌入浏览器
2014-03-07 23:33 717DJNativeSwing-SWT-1-0-2 API ... -
DecimalDocument 限制只能输入数字的TextField
2014-02-25 13:49 452import javax.swing.JTextField; ... -
带星号 JLable
2014-02-25 10:49 423package com.easyfeeling.ui.co ... -
GridBagLayout
2014-02-20 00:32 307GridBagLayout的使用: GridBagLayo ... -
GridLayout的使用
2014-02-20 00:31 528GridLayout的使用 GridLayout的类 ... -
运用 BoxLayout 进行 Swing 控件布局
2014-02-20 00:29 439运用 BoxLayout 进行 Swing 控件布局 ... -
BoxLayout的使用
2014-02-20 00:27 537BoxLayout的类层次结构图: java.lang.O ... -
swing 全局热键
2014-02-19 16:28 1121package com.easyfeeling.utils. ... -
SplashImage 图片闪烁
2014-02-19 13:00 799package com.easyfeeling.ui; / ... -
自定义 JSplitPaneUI
2014-02-19 10:37 471修改 JSplitPane 展开、隐藏按钮的样式位置 ... -
My doc
2014-02-19 10:23 366My doc -
twaverSwing
2014-02-16 21:34 350twaverSwing -
JAVA开发包及文档
2014-02-13 19:01 11JAVA 常用开发包,J2EE,Swing
相关推荐
"文本框输入不合理数据时进行验证"这个主题涉及到的是前端和后端开发中的数据验证技术,确保用户输入的数据符合预设的规则,防止错误、非法或恶意的数据进入系统。以下是对这一主题的详细阐述: 1. **前端验证**: ...
在实际应用中,我们可能需要限制用户在`JTextField`中输入的最大字符数,以确保数据的有效性和防止不必要的错误。在NetBeans IDE中,虽然没有直接的图形化方式来设置`JTextField`的最大字符长度,但可以通过编程方式...
- Apache Commons项目提供了一套BeanUtils工具,其中包含了数据校验的功能,可以用于文本框验证。 8. **JSR 303/JSR 349 (Bean Validation)**: - 在Web应用中,可以利用Bean Validation框架进行服务器端验证,将...
通过这样的设计,开发者可以方便地将`MQDocument`应用于Swing的`JTextField`或其他基于`Document`的组件,实现对用户输入的有效控制,保证数据的质量和系统的稳定性。同时,由于框架的灵活性,它可以适应各种不同的...
2. **注册校验**:在注册过程中,系统需要确保输入的数据符合预设规则,例如,用户名长度限制、密码强度验证等。这些校验可以通过编写自定义验证函数或者使用现有的验证框架如Apache Commons Lang的Validator类来...
在设计用户界面时,为用户提供专门的输入框来输入这些地址可以提高用户体验和数据的准确性。 要创建仿Windows的IP输入框,我们可以使用`JFormattedTextField`,它允许我们限制用户输入的格式。对于IP地址,我们需要...
- 数据校验:输入合法性检查,如学号格式、姓名长度等。 - 错误处理:对于文件读写异常、网络通信错误等情况,需有合理的异常处理机制。 - 用户权限:区分不同用户的角色,如管理员、教师、学生,控制各自可访问的...
在Java中,MD5主要用于数据的完整性校验和密码存储,因为其不可逆性,即使原始数据被篡改,通过MD5计算出的摘要值也会有所不同。 在Java中,我们可以使用`java.security.MessageDigest`类来实现MD5加密。这个类提供...
3. **服务器端验证**:通常使用Java Web框架如Spring MVC、Struts等处理POST请求,校验用户输入并进行登录操作。 4. **会话管理**:登录成功后,服务器通常会创建一个会话(session),存储用户信息,以便在后续请求...
2. **用户信息校验**:在窗体登录部分,系统会对用户输入的信息进行校验,这可能涉及到字符串验证(如非空检查、长度限制)以及密码安全处理(如密码的加密存储和比较)。此外,可能还会实现错误提示,如当用户名或...