第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

爪哇。忽略/禁用鍵功能但仍捕獲 keyEvent

爪哇。忽略/禁用鍵功能但仍捕獲 keyEvent

慕妹3242003 2021-12-22 16:09:53
我有一個(gè) JTextField,我想在關(guān)注它時(shí)記錄 keyEvent。這并不難,我已經(jīng)可以打印出除“TAB”之外的所有鍵名(例如“F1”、“ESCAPE”、“A”、“M”)。問(wèn)題是,當(dāng)我按“TAB”鍵時(shí)焦點(diǎn)會(huì)改變,當(dāng)我按“BACKSPACE”鍵時(shí)會(huì)刪除一個(gè)字符。我想避免這種情況,但保留 keyEvent。所以我想知道是否可以在按下時(shí)忽略按鍵功能。有任何想法嗎?
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

要從JTextField 中消除 Tab-Away 功能,您需要將其setFocusTraversalKeysEnabled屬性設(shè)置為false。完成此操作后,無(wú)法通過(guò)按 TAB(或 SHIFT-TAB)鍵從 JTextField 丟失焦點(diǎn),并且可以在 JTextField 的KeyPressed事件中檢測(cè)到按下 TAB 鍵的事實(shí)。


從 JTextField 中刪除 Backspace/Delete 功能的最簡(jiǎn)單方法是使用自定義DocumentFilter。通過(guò)使用空方法覆蓋過(guò)濾器的remove()方法,可以有效地消除退格鍵或刪除鍵功能。


這一切都可以通過(guò)使用我在下面提供的單一方法來(lái)完成。該方法允許您從提供的 JTextField 禁用或啟用 Tab 和 Backspace 功能:


/**

 * Disables (and can again Enable) the TAB (or SHIFT-TAB), BACKSPACE, and DELETE keys when 

 * used within the supplied JTextField.<br><br>

 * 

 * When the Tab key or Backspace key is hit then it can be detected within the 

 * JTextField's KeyPressed Event by way of:<pre>

 * 

 *      if (event.getKeyCode() == KeyEvent.VK_TAB) {

 *          System.out.println("TAB Key Pressed!");

 *      } 

 *      else if (event.getKeyCode() == KeyEvent.VK_BACK_SPACE) {

 *          System.out.println("BACKSPACE Key Pressed!");

 *      }</pre>

 * 

 * @param jtextfield (JTextField) The desired JTextField variable name to 

 * control.<br>

 * 

 * @param ON_OFF (Optional - Boolean - Default is true) If true (default) then 

 * Tab and Backspace is not allowed within the supplied JTextField. If false is 

 * supplied then Tab and Backspace is allowed within the supplied JTextField.

 */

public void noTABorBACKSPACE(JTextField jtextfield, boolean... ON_OFF) {

    boolean on = true;  // Default ON - No Tab Away and No Backspace allowed.

    if (ON_OFF.length > 0) {

        on = ON_OFF[0];

    }

    if (on) {

        // Remove the TAB Away feature from the JTextField.

        jtextfield.setFocusTraversalKeysEnabled(!on);


        // Disable the Backspace feature from the JTextField.

        // This is done with a custom Document Filter.

        ((AbstractDocument) jtextfield.getDocument()).setDocumentFilter(

            new DocumentFilter(){

                @Override

                // By overriding the remove() method with an empty remove() 

                // method we effectively eliminate Backspace capabilities.

                public void remove(DocumentFilter.FilterBypass fb, int i, int i1) 

                    throws BadLocationException {  }

            }

        );

    }

    else {

        // Re-enable the TAB Away feature for the JTextField.

        jtextfield.setFocusTraversalKeysEnabled(!on);


        // Re-enable the Backspace feature for the JTextField.

        // This is done by removing our custom Document Filter.

        ((AbstractDocument) jtextfield.getDocument()).setDocumentFilter(null);

    }

}

如何使用此方法:


// To disable TAB and BACKSPACE

noTABorBACKSPACE(jTextField1);

//         OR

// noTABorBACKSPACE(jTextField1, true);   


// To re-enable TAB and BACKSPACE

noTABorBACKSPACE(jTextField1, false);

雖然 TAB 和 BACKSPACE 功能在提供的 JTextField 中被禁用,但您可以確定是否通過(guò) JTextField 的KeyPressed事件按下了這些特定鍵,例如:


private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       

    if (evt.getKeyCode() == KeyEvent.VK_TAB) {

        System.out.println("TAB Key Hit!");

    }

    else if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {

        System.out.println("BACKSPACE Key Hit!");

    }

}  

您會(huì)注意到,當(dāng) JTextField 的setFocusTraversalKeysEnabled屬性設(shè)置為布爾值true 時(shí),您將無(wú)法檢測(cè)到 TAB 鍵何時(shí)被擊中,這是因?yàn)?TAB 鍵始終由KeyboardFocusManager 使用。當(dāng)setFocusTraversalKeysEnabled屬性設(shè)置為 boolean false時(shí),情況并非如此。


到目前為止,提供的代碼提供了刪除 Tab-Away 和 Backspace/Delete 功能的方法,但也許您希望保持Delete鍵處于活動(dòng)狀態(tài),而只刪除 TAB 和 BACKSPACE 鍵的功能。如果是這種情況,那么您可以通過(guò)使用 BACKSPACE 按鍵在 JTextField 的KeyPressed事件中執(zhí)行此操作:


private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       

    if (evt.getKeyCode() == KeyEvent.VK_TAB) {

        System.out.println("TAB Key Hit!");

    }

    else if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {

        System.out.println("BACKSPACE Key Hit!");

        evt.consume(); // Consume the BACKSPACE Key Press.

    }

}  

要阻止 TAB 鍵移動(dòng)焦點(diǎn),您仍然需要將setFocusTraversalKeysEnabled屬性設(shè)置為false。


查看完整回答
反對(duì) 回復(fù) 2021-12-22
  • 1 回答
  • 0 關(guān)注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)