Отключить звуковой сигнал при нажатии Backspace в пустом JTextField

Новичок здесь. Кто-нибудь знает быстрый и простой способ заставить JTextField не издавать звуковой сигнал, когда нажата клавиша возврата, а поле пусто? Я видел пару вещей в Интернете об изменении DefaultEditorKit, но ничего не смог понять. Любая помощь будет принята с благодарностью.


person Community    schedule 17.11.2012    source источник
comment
Для других, сталкивающихся с этой проблемой, я ответил здесь: stackoverflow.com/a/30799707/396747   -  person Gary Rowe    schedule 12.06.2015


Ответы (3)


Этот код работал для меня.

Action beep = textArea.getActionMap().get(DefaultEditorKit.deletePrevCharAction);
beep.setEnabled(false);
person Daniel Hladík    schedule 20.02.2015
comment
К сожалению, этот код имеет побочный эффект, заключающийся в предотвращении всех операций удаления возврата. - person Gary Rowe; 12.06.2015
comment
Но вы можете сделать: Action beep = textArea.getActionMap().get(DefaultEditorKit.deletePrevCharAction); textArea.getActionMap().put(DefaultEditorKit.deletePrevCharAction, new DelActionWrapper(textArea, beep)); где DelActionWrapper реализует Action и делегирует вызовы звукового сигнала, за исключением actionPeform, когда textArea пуст. Может есть способ проще - person Yevgen Yampolskiy; 23.10.2016

У меня не было возможности попробовать это, но вы можете отключить звуковой сигнал.

JTextField field = new JTextField();
Action action;
a = field.getActionMap().get(DefaultEditorKit.beepAction);
a.setEnabled(false);
person austin    schedule 17.11.2012

Редактировать: позже я добавлю другой ответ, который, вероятно, будет проще сделать. Я бы прочитал это в первую очередь.

Вы можете попытаться переопределить JTextField в processKeyEvent и проверьте, является ли 1.) нажатая клавиша клавишей возврата и 2.) поле JTextField пусто. Если одно из них ложно, то оно должно вести себя как обычно. В противном случае вы можете просто вернуться из метода.

person austin    schedule 17.11.2012