Java 输入文本只接受数字
我设计了一个小的swing GUI,它有一些JTextFields,但它有一个validateVariables方法,必须验证接口中的所有字段,有一个名为(IP)的JTextField必须只接受int变量。我如何设置它Java 输入文本只接受数字,java,swing,integer,jtextfield,Java,Swing,Integer,Jtextfield,我设计了一个小的swing GUI,它有一些JTextFields,但它有一个validateVariables方法,必须验证接口中的所有字段,有一个名为(IP)的JTextField必须只接受int变量。我如何设置它 p.S JTextfield是在netbeans中用palete工具创建的。当我正确记住swing textfields时,你可以注册为输入/键侦听器,并在每次击键时验证输入。当我正确记住swing textfields时,您可以注册为input/keylistener,并在每次
p.S JTextfield是在netbeans中用palete工具创建的。当我正确记住swing textfields时,你可以注册为输入/键侦听器,并在每次击键时验证输入。当我正确记住swing textfields时,您可以注册为input/keylistener,并在每次击键时验证输入。这是JTextField的javadoc 有一个例子
public class UpperCaseField extends JTextField {
public UpperCaseField(int cols) {
super(cols);
}
protected Document createDefaultModel() {
return new UpperCaseDocument();
}
static class UpperCaseDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
}
}
}
----编辑----
正如@MadProgrammer所说,DocumentFilter是另一种方法,例如:
Document document = someJTextField.getDocument();
if (document instanceof AbstractDocument) {
((AbstractDocument) doc).setDocumentFilter(new DocumentFilter() {
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String str, AttributeSet a) throws BadLocationException {
fb.insertString(offset, str.replaceAll("[^0-9]", ""), a);
}
});
}
这是JTextField的javadoc 有一个例子
public class UpperCaseField extends JTextField {
public UpperCaseField(int cols) {
super(cols);
}
protected Document createDefaultModel() {
return new UpperCaseDocument();
}
static class UpperCaseDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
}
}
}
----编辑----
正如@MadProgrammer所说,DocumentFilter是另一种方法,例如:
Document document = someJTextField.getDocument();
if (document instanceof AbstractDocument) {
((AbstractDocument) doc).setDocumentFilter(new DocumentFilter() {
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String str, AttributeSet a) throws BadLocationException {
fb.insertString(offset, str.replaceAll("[^0-9]", ""), a);
}
});
}
使用
文档过滤器
,这就是它的设计目的
请看一看,尤其是使用
文档过滤器的例子,这就是它的设计目的
看一看,特别是作为示例,只需使用文档过滤器
仅接受整数即可
import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.DocumentFilter.FilterBypass;
public class InputInteger
{
private JTextField tField;
private JLabel label=new JLabel();
private MyDocumentFilter documentFilter;
private void displayGUI()
{
JFrame frame = new JFrame("Input Integer Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5));
tField = new JTextField(10);
((AbstractDocument)tField.getDocument()).setDocumentFilter(
new MyDocumentFilter());
contentPane.add(tField);
contentPane.add(label);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new InputInteger().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class MyDocumentFilter extends DocumentFilter{
private static final long serialVersionUID = 1L;
@Override
public void insertString(FilterBypass fb, int off
, String str, AttributeSet attr)
throws BadLocationException
{
// remove non-digits
fb.insertString(off, str.replaceAll("\\D++", ""), attr);
}
@Override
public void replace(FilterBypass fb, int off
, int len, String str, AttributeSet attr)
throws BadLocationException
{
// remove non-digits
fb.replace(off, len, str.replaceAll("\\D++", ""), attr);
}
}
只需使用DocumentFilter
即可只接受整数
import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.DocumentFilter.FilterBypass;
public class InputInteger
{
private JTextField tField;
private JLabel label=new JLabel();
private MyDocumentFilter documentFilter;
private void displayGUI()
{
JFrame frame = new JFrame("Input Integer Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5));
tField = new JTextField(10);
((AbstractDocument)tField.getDocument()).setDocumentFilter(
new MyDocumentFilter());
contentPane.add(tField);
contentPane.add(label);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new InputInteger().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class MyDocumentFilter extends DocumentFilter{
private static final long serialVersionUID = 1L;
@Override
public void insertString(FilterBypass fb, int off
, String str, AttributeSet attr)
throws BadLocationException
{
// remove non-digits
fb.insertString(off, str.replaceAll("\\D++", ""), attr);
}
@Override
public void replace(FilterBypass fb, int off
, int len, String str, AttributeSet attr)
throws BadLocationException
{
// remove non-digits
fb.replace(off, len, str.replaceAll("\\D++", ""), attr);
}
}
当您想要修改进入字段的内容时,您不应该向文本组件注册KeyListener
——首先,您可能会产生异常,其次,它不会处理用户将文本粘贴到字段中的情况。如果需要,您不应该向文本组件注册KeyListener
要修改字段中的内容,首先要冒生成异常的风险,其次不能处理用户将文本粘贴到字段中的情况。还需要重写DocumentFilter的replace(…)方法。还需要重写DocumentFilter的replace(…)方法。