Я следовал этому примеру, чтобы разрешить ввод только чисел. jTextField?
но теперь это не позволит мне использовать textField.getText();
нужно ли мне вызывать другой метод, чтобы получить текст после использования фильтра документов?
также это должно быть просто JTextField
? форматированное текстовое поле плохо?
РЕДАКТИРОВАТЬ:
package inputinteger;
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());
tField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
tFieldKeyPressed(evt);
}
});
contentPane.add(tField);
contentPane.add(label);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private void tFieldKeyPressed(java.awt.event.KeyEvent evt) {
label.setText(tField.getText());
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new InputInteger().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class MyDocumentFilter extends DocumentFilter{
@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);
}
}
Таким образом, этот код работает нормально, но в программе, которую я создаю, я использую конструктор графического интерфейса пользователя NetBeans и имею JFormattedTextField
, который я хочу принимать только числа в качестве входных данных. Я попытался добавить код создания сообщения, и, похоже, он сработал, но теперь он выдает ошибку, что не может найти JFormattedTextField
(в моем случае CreditInput)
Это может быть что-то очень простое, что я слишком устал, чтобы видеть прямо сейчас. Утром буду копать глубже. Если кто-нибудь увидит мою проблему, я буду признателен за любой вклад!
РЕДАКТИРОВАТЬ 2: это код, который у меня есть в NetBeans
javax.swing.JFormattedTextField creditsInput = new javax.swing.JFormattedTextField();
((AbstractDocument)creditsInput.getDocument()).setDocumentFilter(new MyDocumentFilter());
Далее в коде...
creditsInput.getText();//THIS LINE SAYS Symbol creditsInput cannot be found in class \
также я не могу вводить буквы в текстовое поле, так что эта часть работает, мне просто нужно иметь возможность получить значение того, что введено сейчас.
creditInput
в коде? Я этого не вижу. - person Paul Samsotha   schedule 27.01.2014