Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing文本字段整数值问题_Java_Swing_Jtextfield - Fatal编程技术网

Java Swing文本字段整数值问题

Java Swing文本字段整数值问题,java,swing,jtextfield,Java,Swing,Jtextfield,我在做GUI。用户以整数形式输入年份,该年份显示在GUI上。但问题是我只想从用户那里输入4个整数。如果用户输入5个整数值,则会显示JOptionPane消息,请重新键入。但是我不知道怎么做。 代码: 主要 首先不要让他们输入超过4个字符 tx.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { if (tx.getText().length() &

我在做GUI。用户以整数形式输入年份,该年份显示在GUI上。但问题是我只想从用户那里输入4个整数。如果用户输入5个整数值,则会显示
JOptionPane
消息,请重新键入。但是我不知道怎么做。

代码:

主要


首先不要让他们输入超过4个字符

tx.addKeyListener(new KeyAdapter() {
      @Override
      public void keyTyped(KeyEvent e) {
          if (tx.getText().length() >= 4) {
              e.consume();
          }
      }
  });
然后,您还可以将其展开,以确保它们也只输入数字

tx.addKeyListener(new KeyAdapter() {
      @Override
      public void keyTyped(KeyEvent e) {
          if (tx.getText().length() >= 4 || !Character.isDigit(e.getKeyChar())) {
              e.consume();
          }
      }
  });

伙计们做这件事对实践是有益的

简而言之,你是在检查用户是否输入了有效的年份。 在这种情况下,逻辑方法会更好。在实际情况中,每个应用程序都有特定的用户年份范围。你可以这样做

String w = tx.getText();
int p = Integer.parseInt(w);
int lower_limit = 1960;
int upper_limit = 2050;
if(p>lower_limit && p<uppper_limit){
   at.setText(""+p);
}
String w=tx.getText();
int p=整数.parseInt(w);
int下限=1960;
int上限=2050;

如果(p>lower_limit&&p这是代码,供您快速查看,但请尝试在将来自己实现这些内容

import java.awt.*;
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 MyDocumentFilterExample {

    private static final int MAX_CHARACTERS = 4;
    private JTextField tField;

    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 ( MAX_CHARACTERS ));        
        contentPane.add(tField); 

        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 MyDocumentFilterExample ().displayGUI ();
            }
        };
        EventQueue.invokeLater ( runnable );
    }
}

class MyDocumentFilter extends DocumentFilter {

    private int max_Characters;
    private boolean DEBUG;

    public MyDocumentFilter(int max_Chars) {
        max_Characters = max_Chars;
        DEBUG = false;
    }

    public void insertString(FilterBypass fb
                                    , int offset
                                    , String str
                                    , AttributeSet a) 
                                    throws BadLocationException {
        if (DEBUG) {
            System.out.println("In DocumentSizeFilter's insertString method");
        }
        int length = fb.getDocument ().getLength () + str.length ();
        if (length <= max_Characters && isValid ( str ) ) 
            super.insertString(fb, offset, str, a);
        else 
            Toolkit.getDefaultToolkit().beep();
    }

    public void replace(FilterBypass fb
                            , int offset, int length
                            , String str, AttributeSet a)
                                throws BadLocationException {
        if (DEBUG) {
            System.out.println("In DocumentSizeFilter's replace method");
        }
        int len = fb.getDocument ().getLength () + str.length ();
        if (len - length <= max_Characters && isValid ( str ) ) 
            super.replace(fb, offset, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    private boolean isValid ( String string ) {
        int len = string.length();
        boolean isValidInteger = true;

        for (int i = 0; i < len; i++)
        {
            if (!Character.isDigit(string.charAt(i)))
            {
                isValidInteger = false;
                break;
            }
        }
        return isValidInteger;
    }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.text.AbstractDocument;
导入javax.swing.text.AttributeSet;
导入javax.swing.text.BadLocationException;
导入javax.swing.text.DocumentFilter;
导入javax.swing.text.DocumentFilter.FilterBypass;
公共类MyDocumentFilterExample{
私有静态最终整数最大字符数=4;
私有JTextField;
私有void displayGUI(){
JFrame frame=新JFrame(“输入整数示例”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane=新的JPanel();
contentPane.setOrder(
createEmptyByOrder(5,5,5,5));
tField=新的JTextField(10);
((AbstractDocument)tField.getDocument()).setDocumentFilter(
新MyDocumentFilter(最大字符数);
contentPane.add(tField);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
Runnable Runnable=新的Runnable(){
@凌驾
公开作废运行(){
新的MyDocumentFilterExample().displayGUI();
}
};
EventQueue.invokeLater(可运行);
}
}
类MyDocumentFilter扩展了DocumentFilter{
私有int max_字符;
私有布尔调试;
公共MyDocumentFilter(整数最大字符){
最大字符数=最大字符数;
调试=错误;
}
public void insertString(FilterBypass)
,整数偏移量
,String str
,属性集a)
抛出BadLocationException{
如果(调试){
System.out.println(“In-DocumentSizeFilter的insertString方法”);
}
int length=fb.getDocument().getLength()+str.length();

if(长度)使用string.valueOf(integer对象)将整数转换为字符串然后检查字符串的长度…为此,使用
DocumentFilter
来解决这两个问题。首先是to和to,这可以是inserted@nIcE你能不能给我一个代码,如何实现这个program@hamel123或者,我认为一个
JSpinner
可能更合适…@hamel123这不是一个代码编写服务,不是使用JSpinner和SpinnerDateModel实现DocumentListener/Filter和confortable
    String w = tx.getText();
            int p = Integer.parseInt(w);

            String e=String.valueOf(w);
    int m = e.length();
    System.out.println(m);

    if(e.length()==4){


             at.setText(""+p);
    }
    else{
        JOptionPane.showMessageDialog(null, "Wrong");
    }
        }   

    });
String w = tx.getText();
int p = Integer.parseInt(w);
int lower_limit = 1960;
int upper_limit = 2050;
if(p>lower_limit && p<uppper_limit){
   at.setText(""+p);
}
import java.awt.*;
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 MyDocumentFilterExample {

    private static final int MAX_CHARACTERS = 4;
    private JTextField tField;

    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 ( MAX_CHARACTERS ));        
        contentPane.add(tField); 

        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 MyDocumentFilterExample ().displayGUI ();
            }
        };
        EventQueue.invokeLater ( runnable );
    }
}

class MyDocumentFilter extends DocumentFilter {

    private int max_Characters;
    private boolean DEBUG;

    public MyDocumentFilter(int max_Chars) {
        max_Characters = max_Chars;
        DEBUG = false;
    }

    public void insertString(FilterBypass fb
                                    , int offset
                                    , String str
                                    , AttributeSet a) 
                                    throws BadLocationException {
        if (DEBUG) {
            System.out.println("In DocumentSizeFilter's insertString method");
        }
        int length = fb.getDocument ().getLength () + str.length ();
        if (length <= max_Characters && isValid ( str ) ) 
            super.insertString(fb, offset, str, a);
        else 
            Toolkit.getDefaultToolkit().beep();
    }

    public void replace(FilterBypass fb
                            , int offset, int length
                            , String str, AttributeSet a)
                                throws BadLocationException {
        if (DEBUG) {
            System.out.println("In DocumentSizeFilter's replace method");
        }
        int len = fb.getDocument ().getLength () + str.length ();
        if (len - length <= max_Characters && isValid ( str ) ) 
            super.replace(fb, offset, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    private boolean isValid ( String string ) {
        int len = string.length();
        boolean isValidInteger = true;

        for (int i = 0; i < len; i++)
        {
            if (!Character.isDigit(string.charAt(i)))
            {
                isValidInteger = false;
                break;
            }
        }
        return isValidInteger;
    }
}