Привет, я реализовал простой метод focusListener и зарегистрировал два jTextFields. То, что этот метод делает, это добавить числа в них и отобразить их в JLabel. Если я набрал в них «2», он будет правильно обновлять, чтобы дать мне 4. Однако, если я просто удалю 2 после этого, событие focusLost не будет запущено, даже если я нажму в другом месте. Если я введу 0 в JTextField, то событие focusLost будет происходить нормально. Почему это так? Благодаря!lostFocusEvent не возникает, когда я удаляю текст внутри Jtextfield?
ответ
Без SSCCE трудно сказать, какую логику вы используете в своем случае. Так как в этом примере, приведенном ниже, он работает, как вы ожидаете:.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class TextFieldExample
{
private JTextField tfield1;
private JTextField tfield2;
private JLabel label;
private FocusListener tfieldListener = new FocusListener()
{
@Override
public void focusGained(FocusEvent fe)
{
}
@Override
public void focusLost(FocusEvent fe)
{
String num1 = tfield1.getText().trim();
String num2 = tfield2.getText().trim();
if (num1 == null || num1.equals(""))
num1 = "0";
if (num2 == null || num2.equals(""))
num2 = "0";
label.setText(Integer.toString(Integer.parseInt(num1) + Integer.parseInt(num2)));
}
};
private void displayGUI()
{
JFrame frame = new JFrame("Text Field Focus Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
tfield1 = new JTextField(10);
tfield2 = new JTextField(10);
tfield1.addFocusListener(tfieldListener);
tfield2.addFocusListener(tfieldListener);
((AbstractDocument)tfield1.getDocument()).setDocumentFilter(new MyDocumentFilter());
((AbstractDocument)tfield2.getDocument()).setDocumentFilter(new MyDocumentFilter());
label = new JLabel("SUM IS");
contentPane.add(tfield1);
contentPane.add(tfield2);
contentPane.add(label);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
class MyDocumentFilter extends DocumentFilter
{
@Override
public void insertString(FilterBypass fb, int offset
, String text
, AttributeSet aset)
{
try
{
super.insertString(fb, offset, text.replaceAll("\\D++", ""), aset);
}
catch(BadLocationException ble)
{
ble.printStackTrace();
}
}
@Override
public void replace(FilterBypass fb, int offset, int len
, String text
, AttributeSet aset)
{
try
{
super.replace(fb, offset, len, text.replaceAll("\\D++", ""), aset);
}
catch(BadLocationException ble)
{
ble.printStackTrace();
}
}
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TextFieldExample().displayGUI();
}
});
}
}
@Laughy : Если вы оставите 'JTextField' пустым, тогда вы обязательно получите' NumberFormatException', так как вы не сможете преобразовать '' '' в значение Integer. –
Один из подходов состоит в том, чтобы использовать value
в JFormattedTextField
, как показано на этом example и обведено here.
JFormattedTextField, всегда полезно идти в этом случае :-) –
- 1. Как выровнять текст внутри JTextField?
- 2. DbProviderFactories.GetFactoryClasses() не работает, когда я удаляю odp.net
- 3. SharedPreferences не удаляются, когда я удаляю
- 4. Текст JTextField не изменен
- 5. ничего не отображаются, когда я добавить JTextField
- 6. Я удаляю воспоминания внутри области функции?
- 7. Текст JTextField должен очищаться, когда я начинаю вводить его
- 8. Когда я удаляю строки в Cassandra, я удаляю только столбцы, а не строки.
- 9. Почему мой селектор jQuery не замечает, когда я удаляю класс?
- 10. ПубликацияНе стрелять, когда я удаляю содержимое ввода
- 11. Добавить www. когда я удаляю www
- 12. Ошибка в C# Когда я удаляю строку
- 13. Возникает ли событие onMouseOut, когда я удаляю в javascript элемент, в котором находится мышь?
- 14. XPath возвращает null, когда я удаляю префикс
- 15. tf402455, когда я удаляю ветку функций
- 16. Как решить NaN, когда я удаляю номер?
- 17. Когда я запускаю и удаляю свои UserControls?
- 18. Получите идентификатор, когда я удаляю столбцы
- 19. onTextChanged, когда я удаляю значение totaly
- 20. Ошибка возникает, когда я устанавливаю connectToSortable внутри функции перетаскивания
- 21. java.util.ConcurrentModificationException Но я не удаляю
- 22. JTextField текст на контроллер
- 23. Я хочу получить текст из JTextField
- 24. Изменить текст сфокусированного JTextField
- 25. Я удаляю appcompat v7
- 26. Почему мой SurperView не отвечает, когда я удаляю UIView SubView?
- 27. Мой код не выполняется, когда я удаляю debug.print в VBA
- 28. Когда я удаляю строку в datatable, не исчезает - primafaces - Java?
- 29. Лицевая ссылка не удаляется, когда я удаляю расширение в magento
- 30. Почему, когда я удаляю toLowerCase(), тогда не сортировать мои слова?
вам нужно добавить jTextField.getDocument() addDocumentListener (новый DocumentListener() {...}). –
@ Liuguanghua hi Я пробовал именно это. Однако он запускает событие даже при вводе текста в него. Как я могу сделать так, чтобы событие было запущено после того, как человек закончил вводить текст в поле jtextfield (независимо от того, пустое поле или нет) – Laughy