java:限制swing中的JTextField只能输入中文,字母,数字。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java:限制swing中的JTextField只能输入中文,字母,数字。相关的知识,希望对你有一定的参考价值。

求相关程序,谢谢了。

看代码:

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Main 

public static void main(String[] args) throws Exception 
JFrame frame = new JFrame("JTextField 只能输入中文,字母,数字");
JLabel label = new JLabel("输入:");
JTextField textField = new JTextField(20);
// 当 JTextField 中内容发生改变时触发
textField.addCaretListener(new TextFieldInputListener());

JPanel panel = new JPanel();
panel.add(label);
panel.add(textField);

frame.add(panel, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);




class TextFieldInputListener implements CaretListener 

@Override
public void caretUpdate(CaretEvent e) 
JTextField textField = (JTextField) e.getSource(); // 获得触发事件的 JTextField
String text = textField.getText();
if (text.length() == 0) 
return;

char ch = text.charAt(text.length() - 1);
if (!(ch >= '0' && ch <= '9' // 数字
|| ch >= 'A' && ch <= 'z' // 字母
|| ch >= '\\u4E00' && ch <= '\\u9FA5'))  // 中文,最常用的范围是 U+4E00~U+9FA5,也有使用 U+4E00~ U+9FFF 的,但目前 U+9FA6~U+9FFF 之间的字符还属于空码,暂时还未定义,但不能保证以后不会被定义
JOptionPane.showMessageDialog(textField, "只能输入中文,字母,数字", "提示", JOptionPane.INFORMATION_MESSAGE);
SwingUtilities.invokeLater(new Runnable() 
@Override
public void run() 
// 去掉 JTextField 中的末尾字符
textField.setText(text.substring(0, text.length() - 1));

);



参考技术A 正则表达式吧

NetBeans 中的 Java Swing Jscrollpane

【中文标题】NetBeans 中的 Java Swing Jscrollpane【英文标题】:Java Swing Scrollpane in NetBeans 【发布时间】:2010-01-13 06:25:30 【问题描述】:

我有将 JTextFields @runtime 添加到 JPanel 的 Java 应用程序。基本上用户单击一个按钮并添加新的 JTextField,再次单击再次添加...

每个新的 JTextField 都在前一个的正下方。显然我很快就用完了空间,所以我正在尝试使用 JScrollPane,这就是地狱开始的地方,因为无论我尝试什么,它都不起作用。

    右键单击 JPanel 并包含在滚动窗格中。没用。 阅读了一些示例后,我意识到我必须将 JPanel 作为 JScrollPane 构造函数的参数。我通过右键单击 ScrollPane 和 CustomizeCode 来做到这一点。因为显然自动生成的代码在 NetBeans 中受到保护,我不能手动更改所有这些声明等。还是不行。 我确实尝试将 JPanel 和/或 JScrollPane 的 PreferedSize 设置为 null,但没有帮助。 JScrollPane 是我们称之为 TabJPanel 的子项(它又是 TabbedPane 的选项卡)。我试图弄乱他们的关系,基本上尝试了 JFrame、JPanel(持有文本字段)、TabJPanel 和 JScrollPane 之间所有可能的亲子关系,但没有任何效果。 我还将 VerticalScrollBar 设置为“始终可见”,以防万一。所以我看到了滚动条,只是用 JTextFields 填充 JPanel 不会影响它。 当 JTextField 太多时,它们会转到 JPanel 的底部边框“下方”,我再也看不到它们了。

添加新 JTextFields 的代码是这样的,如果它是相关的。

JTextField newField = new JTextField( columns );
Rectangle coordinates = previousTextField.getBounds();
newField.setBounds(coordinates.x , coordinates.y + 50, coordinates.width, coordinates.height);

JPanel.add(newField);
JPanel.revalidate();
JPanel.repaint();

对不起,我只是想提供尽可能多的信息,因为作为新手,我不知道什么是完全相关的,什么不是。在此先感谢:)

【问题讨论】:

您是否考虑过在单列中使用JTable?这将自动完成所有这些事情,并且可以更轻松地处理您的动态值。 A JList 与单列 JTable 一样好。 @akf:我不同意。 JList 不可编辑(请参阅bugs.sun.com/bugdatabase/…) @Peter Lang,说得好。开箱即用,没有对 JList 的编辑支持。 【参考方案1】:

由于现在有另一个答案,我也添加我的建议。

这听起来就像在单列中使用 JTable 时出现的问题。 JList 是 not yet editable(可能永远不会)。

JTable 会为您处理布局问题,您可以通过表格轻松访问值。

使用您自己的TableModel(在您的情况下使用简单的Vector 就足够了),并为其添加值。

【讨论】:

非常感谢,实际上带有可编辑内容的 JTable 比拥有大量 TextField 更适合我的目的 :)【参考方案2】:

您可以选择使用LayoutManager,而不是直接在组件上设置边界。为了测试这一点,一个简单的单列GridLayout 将对齐设置为垂直应该证明这个概念。

panel.setLayout(new GridLayout(0,1));

rows 参数中的零允许根据需要将行添加到布局中。

【讨论】:

【参考方案3】:

我这样做是为了添加一个滚动面板,创建一个面板并用几个组件填充它,然后在要添加它的组件中创建一个滚动面板,剪切并粘贴所有细节都将落入的面板并调整大小滚动窗格。由于组件占用的空间比可见的空间更大,右键单击滚动窗格并选择设计此容器,因此您可以增加滚动窗格的大小并添加尽可能多的组件。

【讨论】:

以上是关于java:限制swing中的JTextField只能输入中文,字母,数字。的主要内容,如果未能解决你的问题,请参考以下文章

如何拦截转到 Java Swing JTextField 的键盘敲击?

java swing JTextField设置PlaceHolder [重复]

java swing JTextField设置PlaceHolder [重复]

Java Swing:JTextField 没有按预期失去焦点

Java Swing JtextField 插图

NetBeans 中的 Java Swing Jscrollpane