Чтобы исключить функцию Tab-Away из JTextField, вам необходимо установить для его свойства setFocusTraversalKeysEnabled значение false. Как только это будет сделано, фокус не может быть потерян из JTextField нажатием клавиши TAB (или SHIFT-TAB), и тот факт, что клавиша TAB была нажата, может быть обнаружена в KeyPressed< JTextField. /сильное> событие.
Самый простой способ удалить функцию Backspace/Delete из JTextField — это использовать пользовательский Фильтр документов. Переопределение метода remove() фильтра пустым методом эффективно устраняет возможности клавиш Backspace или Delete.
Все это может быть достигнуто с использованием одного метода, который я предоставил ниже. Метод позволяет отключить или включить возможности Tab и Backspace из предоставленного JTextField:
/**
* 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, вы можете определить, были ли нажаты эти конкретные клавиши с помощью события 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!");
}
}
Вы заметите, что когда для свойства JTextField setFocusTraversalKeysEnabled установлено логическое значение true, вы не сможете определить, когда нажата клавиша TAB, потому что клавиша TAB всегда используется KeyboardFocusManager. Это не так, когда для свойства setFocusTraversalKeysEnabled установлено логическое значение false.
На данный момент предоставленный код дает возможность удалить возможности Tab-Away и Backspace/Delete, но, возможно, вы хотите оставить активную клавишу Delete и просто удалить возможности для клавиш TAB и BACKSPACE. Если это так, вы можете сделать это из события JTextField KeyPressed, нажав клавишу BACKSPACE:
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 не перемещала фокус, вам все равно нужно установить для свойства setFocusTraversalKeysEnabled значение false.
person
DevilsHnd
schedule
01.11.2018