【发布时间】:2014-05-03 03:26:12
【问题描述】:
我在尝试获取 JFormattedTextField 的大小时遇到问题。实际上,我需要用户输入一个简单的 pinCode,然后获取他输入的内容的大小,以便在它之后立即循环。如果他输入了 4 位数字就可以了,否则他必须重新输入。但是当我运行我的项目时,我有一个“Pin must be 4 digits”的无限循环......
我已经找到了这个link,但它并没有解决我的问题。
这是我的代码:
package codePin;
import java.io.*;
import java.text.NumberFormat;
import java.util.*;
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 JFormattedTextField jtf = new JFormattedTextField(NumberFormat.getIntegerInstance());
private JLabel label = new JLabel("Enter Pin: ");
private JButton b = new JButton("OK");
public Main() {
this.setTitle("APP");
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();
Font police = new Font("Arial", Font.BOLD, 14);
jtf.setFont(police);
jtf.setPreferredSize(new Dimension(150, 30));
jtf.setForeground(Color.BLUE);
b.addActionListener(new BoutonListener());
top.add(label);
top.add(jtf);
top.add(b);
this.setContentPane(top);
this.setVisible(true);
}
class BoutonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
int nbTry = 0;
boolean authenticated = false;
do {
do {
if (jtf.getText().length() != 4) {
System.out.println("Pin must be 4 digits");
} else {
System.out.println("Checking...");
}
ArrayList<Integer> pins = new ArrayList<Integer>();
readPinsData(new File("bdd.txt"), pins);
String[] thePins = new String[pins.size()];
for (int i = 0; i < thePins.length; i++) {
thePins[i] = pins.get(i).toString();
}
String passEntered = String.valueOf(jtf);
for (int i = 0; i < thePins.length; i++) {
if (passEntered.equals(thePins[i]) && jtf.getText().length() == 4) {
System.out.println(":)");
authenticated = true;
break;
}
}
} while (jtf.getText().length() != 4);
if (!authenticated && jtf.getText().length() == 4) {
System.out.println(":(");
nbTry++;
}
} while (nbTry < 3 && !authenticated);
//System.out.println("TEXT : jtf " + jtf.getText());
}
}
// Function to read/access my pins database (file bdd.txt)
static public boolean readPinsData(File dataFile, ArrayList<Integer> data) {
boolean err = false;
try {
Scanner scanner = new Scanner(dataFile);
String line;
while (scanner.hasNext()) {
line = scanner.nextLine();
try {
data.add(Integer.parseInt(line));
} catch (NumberFormatException e) {
e.printStackTrace();
err = true;
}
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
err = true;
}
return err;
}
public static void main(String[] args) {
Main fen = new Main();
}
}
bdd.txt:
1111
1234
2222
3333
4444
5555
6666
7777
8888
9999
我该怎么做?有什么想法吗?
谢谢,弗洛伦特。
【问题讨论】:
标签: java eclipse swing jframe jformattedtextfield