嗨,我已經實現了一個簡單的focusListener方法並註冊了兩個jTextFields。這種方法所做的是在它們中添加數字並將其顯示在JLabel中。如果我在其中鍵入了「2」,它會正確更新以給我4.但是,如果我之後刪除了2,即使我點擊其他地方,也不會激發focusLost事件。如果我在JTextField中輸入0,那麼focusLost事件將正常發生。爲什麼?謝謝!當我刪除Jtextfield中的文本時,lostFocusEvent不會發生?
0
A
回答
3
如果沒有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();
}
});
}
}
+0
@Laughy :如果你將'JTextField'留空,那麼你肯定會得到'NumberFormatException',因爲你不能將''「'轉換爲整數值。 –
3
相關問題
- 1. 當我在html中刪除doctype時會發生什麼?
- 2. 當文件被刪除時,文件句柄會發生什麼?
- 3. 當我刪除一列時Oracle會發生什麼?
- 4. 如何在JTextField中刪除文本?
- 5. onSelectedChange發生時刪除文本
- 6. 當我刪除它時,UISearchController不會刪除結果
- 7. 當文件被刪除時,FileOutputStream寫入不會引發異常?
- 8. 當我從地圖中刪除條目時,map :: iterator會發生什麼?
- 9. 當我嘗試刪除Eclipse中的空文件夾時發生錯誤
- 10. 當應用程序被刪除時PendingIntents會發生什麼?
- 11. 當Hbase表被刪除時,數據會發生什麼變化?
- 12. 當懸掛指針被刪除時會發生什麼?
- 13. 當達到邏輯刪除限制時會發生什麼
- 14. 當我更改文本框中的文本時,C#事件不會觸發
- 15. 當我更改字體時,JTextField大小發生改變
- 16. UITextView textView:shouldChangeTextInRange:replacementText:在刪除大部分文本時不會觸發?
- 17. 的XCode不會刪除派生文件
- 18. 當我不包含頭文件時會發生什麼
- 19. 當我不提供-hd文件時會發生什麼?
- 20. Android:當我點擊十字按鈕時,searchView不會刪除文本
- 21. 當會話過期時刪除文檔
- 22. 當我ping 127.0.0.1時會發生什麼
- 23. 當我編譯時會發生什麼?
- 24. Wix不會刪除它的文件,如果我刪除我的
- 25. 在變更集中刪除文件時,TFS getcs不會刪除本地文件?
- 26. 我的JTextField不會出現
- 27. 當從mysql中刪除數據時,它佔用的空間會發生什麼?
- 28. 如果我刪除apache日誌文件會發生什麼?
- 29. 如果我刪除gps.conf文件會發生什麼
- 30. 當我們試圖從hash_set中刪除不存在的密鑰時會發生什麼
你需要添加jTextField.getDocument()addDocumentListener(新的DocumentListener(){...})。 –
@李光華你好我已經試過了。然而,即使在我輸入文字時,它也會觸發事件。我怎樣才能讓事件在用戶完成將文本輸入到jtextfield後觸發?(無論是否爲空字段) – Laughy