-3
那麼,我正在開發一個需要用戶輸入的java項目。我意識到,如果用戶在字段中沒有字符時按下退格鍵,則會聽到窗口警告聲。我怎樣才能阻止這個請。如果在不同平臺上的行爲可能不同,我的系統是Windows 10。謝謝。空jtextfield/jpassword刪除聲音
那麼,我正在開發一個需要用戶輸入的java項目。我意識到,如果用戶在字段中沒有字符時按下退格鍵,則會聽到窗口警告聲。我怎樣才能阻止這個請。如果在不同平臺上的行爲可能不同,我的系統是Windows 10。謝謝。空jtextfield/jpassword刪除聲音
行爲在不同平臺上可能會有所不同。
是的,行爲可以是不同的,因爲它是由LAF控制的,所以你不應該改變它。
但要理解Swing的工作原理,您需要了解Swing使用DefaultEditorKit
提供的Action
來提供文本組件的編輯功能。
以下爲當前的「刪除前一個字符」行動的代碼(從DefaultEditKit
拍攝):
/*
* Deletes the character of content that precedes the
* current caret position.
* @see DefaultEditorKit#deletePrevCharAction
* @see DefaultEditorKit#getActions
*/
static class DeletePrevCharAction extends TextAction {
/**
* Creates this object with the appropriate identifier.
*/
DeletePrevCharAction() {
super(DefaultEditorKit.deletePrevCharAction);
}
/**
* The operation to perform when this action is triggered.
*
* @param e the action event
*/
public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
boolean beep = true;
if ((target != null) && (target.isEditable())) {
try {
Document doc = target.getDocument();
Caret caret = target.getCaret();
int dot = caret.getDot();
int mark = caret.getMark();
if (dot != mark) {
doc.remove(Math.min(dot, mark), Math.abs(dot - mark));
beep = false;
} else if (dot > 0) {
int delChars = 1;
if (dot > 1) {
String dotChars = doc.getText(dot - 2, 2);
char c0 = dotChars.charAt(0);
char c1 = dotChars.charAt(1);
if (c0 >= '\uD800' && c0 <= '\uDBFF' &&
c1 >= '\uDC00' && c1 <= '\uDFFF') {
delChars = 2;
}
}
doc.remove(dot - delChars, delChars);
beep = false;
}
} catch (BadLocationException bl) {
}
}
if (beep) {
UIManager.getLookAndFeel().provideErrorFeedback(target);
}
}
}
如果你不喜歡的嗶嗶聲,那麼你就需要創建自己的自定義操作消除嘟嘟聲。 (即不提供錯誤反饋)。一旦你自定義操作,您可以使用不是改變單一的文本字段:
textField.getActionMap().put(DefaultEditorKit.deletePrevCharAction, new MyDeletePrevCharAction());
,也可以使用更改所有文本字段:
ActionMap am = (ActionMap)UIManager.get("TextField.actionMap");
am.put(DefaultEditorKit.deletePrevCharAction, new MyDeletePrevCharAction());
感謝。這給了我足夠的暗示來解決問題。非常感謝。 – user7121782
在答案解決你的問題,一定要接受它。訪問[接受答案如何工作?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)瞭解更多,並確保接受答案。謝謝! –