我正在使用JavaFX 2.2项目,我使用TextField控件时遇到问题.我想限制用户将输入到每个TextField的字符,但我找不到像maxlength这样的属性.摆动存在同样的问题,并以这种方式解决.如何解决JavaFX 2.2?
我必须限制JTextField中的字符数.我使用以下代码来做到这一点,但问题是我使用虚拟键盘将数据提供给JTextField.因此偏移量始终设置为0.当我输入超过指定数量的字符时,它会重置字段并从头开始执行.例如,如果我的限制是3个字符并且我进入xyz0我的有限文本框,则读取字符z,然后清除该字段并重新启动.所以我留0在了现场.代码如下.
public class JTextFieldLimit extends PlainDocument {
private int limit;
public JTextFieldLimit(int limit) {
super();
this.limit = limit;
}
@Override
public void insertString( int offset, String str, AttributeSet attr ) throws BadLocationException {
if (str == null) return;
System.out.println("from document helper getLength():"+getLength());
System.out.println("from document helper str.length():"+str.length());
System.out.println("from document helper str:"+str);
System.out.println("from document helper attr:"+attr);
System.out.println("from document helper offset:"+offset);
if ((getLength() + str.length()) <= limit) {
super.insertString(offset, str, attr);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我工作的一个数独解算器,我试图限制量的数字,用户可以进入细胞,以及只能够输入数字,目前还接受信件.它的工作原理如下:如果用户输入"11125455876",它将只使用输入的最后一个数字(在本例中为"6").我想将用户可以输入单个单元格的数量限制为1,并且只接受数字1-9.我不确定我该怎么做.所以也许它只会覆盖以前的数字或者其他东西,如果我按一个字母键作为"a"就不会发生任何事情.
这是我的代码:
public PanelGUI(int size) {
super(size);
NumberFormat f = NumberFormat.getInstance();
f.setMaximumIntegerDigits(1);
f.setMinimumIntegerDigits(0);
f.setGroupingUsed(false);
cells = new JTextField[size][size];
panel.setLayout(new GridLayout(size, size));
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cells[i][j] = new JFormattedTextField(f);
cells[i][j].setEditable(true);
cells[i][j].setFont(boldFont);
cells[i][j].setBorder(BorderFactory.createMatteBorder(1, 1, 1,
1, Color.white));
cells[i][j].setHorizontalAlignment(JTextField.CENTER);
panel.add(cells[i][j]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用number format.
我的Java代码在Eclipse中工作,但我需要添加一些功能.
首先,如何限制用户可以输入的位数?实际上我有一个JPasswordField让一个人输入一个pin代码,我希望这个JPasswordField最多限制为4位数.那么如何在输入4位数后立即停止输入?
然后,我如何玩JPassword框的大小?有没有办法像JTextField一样修改它?因为我的行"p1.setPreferredSize(new Dimension(100,25));" 似乎并没有真正让我修改盒子的大小.

如您所见,JPassworldField框具有默认大小,我无法弄清楚如何轻松修改.
这是我的代码:
package codePin;
import java.io.*;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel container = new JPanel();
private JPasswordField p1 = new JPasswordField(4);
private JLabel label = new JLabel("Enter Pin: ");
private JButton b = new JButton("OK");
public Main() {
this.setTitle("NEEDS");
this.setSize(300, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
container.setBackground(Color.white);
container.setLayout(new BorderLayout());
JPanel top = new JPanel();
p1.setPreferredSize(new Dimension(100, 25)); //How …Run Code Online (Sandbox Code Playgroud)