Я хочу отключить звуковой сигнал в JFormattedTextField,
Не очень конкретно. Для какого действия вы пытаетесь отключить звуковой сигнал? Например, я знаю, что в текстовом поле вы услышите звуковой сигнал, когда нажмете кнопку возврата, и вы уже находитесь в начале текстового поля.
В этом случае текстовый компонент использует привязки клавиш для выполнения действия. Таким образом, клавиша возврата вызывает действие «назад». См. раздел Привязки клавиш, чтобы программа перечислила все привязки клавиш.
Поэтому, если вы хотите отключить звуковой сигнал, вам нужно настроить действие. Ниже я скопировал (из DefaultEditorKit) действие, используемое для удаления символа в текстовом компоненте. Я сделал пару изменений, чтобы отключить звуковой сигнал:
static class MyDeletePrevCharAction extends TextAction {
/**
* Creates this object with the appropriate identifier.
*/
MyDeletePrevCharAction() {
//super(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);
System.out.println("beep");
}
}
}
Вы можете использовать это действие для определенного текстового компонента, используя:
textField.getActionMap()
.put(DefaultEditorKit.deletePrevCharAction, new MyDeletePrevCharAction());
person
camickr
schedule
02.07.2014