簡體   English   中英

DocumentListener或KeyListener

[英]DocumentListener or KeyListener

正是在評論中提到了這個問題 ,並在回答這個問題documentListenerdocumentFilter應使用,而不是keyListener 為什么是這樣?

前幾天,我在一個簡單的Hangman游戲中編寫了類似以下代碼的代碼:

public class Hangman extends JFrame implements KeyListener, ActionListener{
    private JTextField guess;
    private JButton b1;
    private void addComponentsToPane(){
        b1 = new JButton("New Game");
        b1.addActionListener(this);
        guess = new JTextField(2);
        guess.addKeyListener(this);

稍后在代碼中,我使用keyTyped(KeyEvent ke)JTextFieldJButton actionPerformed(ActionEvent ae)獲取文本輸入。

我的問題是,應該使用documentListener / documentFilter而不是keyListener為什么為什么不呢?

  • KeyListener -幾乎不要將它與文本組件一起使用,因為它是低級構造,並且可能使文本組件的功能混亂。
  • DocumentListener-如果您不打算過濾輸入,請使用此選項-如果您要接受所有顯示的輸入,但只想跟蹤輸入。
  • DocumentFilter-如果要在顯示之前過濾輸入,請使用。

我本人會使用DocumentFilter,因為這樣可以忽略非字母輸入。 而且我也支持凱文提到的所有觀點。 他的答案加1+。

我將回答一個問題:如果在使用鼠標中鍵作為“粘貼”命令的系統上運行程序,應該怎么辦? 例如,某些版本的Linux會這樣做。

在這種情況下,用戶可以將文本粘貼到JTextField中,而您的程序將無法檢測到它。

有很多類似的情況,因此,盡管您的KeyListener在大多數情況下都可以使用,但您不應依賴它來處理重要的事情-否則,您將有很多困惑和煩惱的用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM