我是java的新手,我正在尝试创建一个简单的程序,如果它不是整数,将删除用户在文本字段上的输入。
private void jTextField4KeyPressed(java.awt.event.KeyEvent evt) {
int j;
try {
j = Integer.parseInt(jTextField4.getText());
}
catch (NumberFormatException f) {
jOptionPane1.showMessageDialog(null, "AwtsuPaytsu");
jTextField4.setText("");
}
}
它自动成功删除非整数输入。但是,它也会删除整数输入。我该怎么办?我真的需要帮助。我想学习。
答案 0 :(得分:2)
看看这个例子,这只会接受来自用户的号码。在这里,我使用Document Filter仅接受数字,而不接受其他数字。
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);
}
}
有用的链接
答案 1 :(得分:0)
因此,您要删除字符串中的所有非数字,并在文本字段中再次设置该数字。 您可以尝试以下方法。
private void jTextField4KeyPressed(java.awt.event.KeyEvent evt) {
String str = jTextField4.getText();
StringBuilder str1 = new StringBuilder();
for(int i = 0; i <= str.length() - 1; ++i) {
if(!Character.isLetter(str.charAt(i))) {
str1.append(str.charAt(i));
}
else {
jOptionPane1.showMessageDialog(null, "AwtsuPaytsu");
}
}
jTextField4.setText(str1);
}
答案 2 :(得分:0)
即使我认为Jugadus接近这里是正确的。 (没有足够的代表评论抱歉)
提问者似乎有点太多了。
在我看来,在编写之后修复它只是一种糟糕的方法。
我认为你应该看看:
https://stackoverflow.com/a/11093360/661142
通过使用keyListeners,你会遗漏很多东西(比如粘贴等)
或为此目的使用JFormattedTextField,如:
答案 3 :(得分:-1)
从jTextField事件中,选择keyReleased事件而不是keyPressed! 并将此代码放在新生成的处理程序中:
private void keyReleased(java.awt.event.KeyEvent evt) {
try {
Integer.parseInt(jTextField2.getText());
} catch (NumberFormatException f) {
if (!jTextField2.getText().isEmpty())
JOptionPane.showMessageDialog(null, "AwtsuPaytsu");
jTextField2.setText(jTextField2.getText().replaceAll("[^0-9]", ""));
//jTextField2.setText("");
}
}
答案 4 :(得分:-2)
尝试:
jTextField4.setText(jTextField4.getText().replaceAll("[^0-9]", ""));