Java Swing文本字段整数值问题
我在做GUI。用户以整数形式输入年份,该年份显示在GUI上。但问题是我只想从用户那里输入4个整数。如果用户输入5个整数值,则会显示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() &
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;
}
}