/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.ui.text; import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** * <code>RecordingKeyStrokeTextField</code> is a text field that record a KeyStroke entered by the user. * * @author Arik Hadas */ public class RecordingKeyStrokeTextField extends JTextField implements FocusListener, KeyListener { /** The last KeyStroke that was entered to the field. */ private KeyStroke lastKeyStroke; /** The default border of JTextField */ private final Border defaultTextFieldBorder = getBorder(); public RecordingKeyStrokeTextField(int columns, KeyStroke keyStroke) { // set text field's length setColumns(columns); // The text will be shown at the center of the text field setHorizontalAlignment(JTextField.CENTER); // The text field should not be editable setEditable(false); // Change colors to prevent the user from marking the field's text setSelectionColor(UIManager.getColor("jtextfield.background")); setSelectedTextColor(getForeground()); // Use JTextField's "setText" method to set the initial KeyStroke in the text field super.setText(KeyStrokeUtils.getKeyStrokeDisplayableRepresentation(lastKeyStroke = keyStroke)); // Add listeners: addFocusListener(this); addKeyListener(this); } /** * This method is used to fetch the KeyStroke in the text-field. * The returned KeyStrole is the last KeyStroke entered to the field by the user, or * the initial KeyStroke that was loaded to the field if the user didn't entered anything. * * @return the KeyStroke in the text-field */ public KeyStroke getKeyStroke() { return lastKeyStroke; } ////////////////////////////////// ///// FocusListener methods //// ///////////////////////////////// public void focusGained(FocusEvent e) { // change border to indicate this field gained the focus // and the user can type setBorder(BorderFactory.createLineBorder(Color.orange, 2)); } public void focusLost(FocusEvent e) { // change border to indicate this field lost the focus setBorder(defaultTextFieldBorder); } //////////////////////////////// ///// KeyListener methods //// //////////////////////////////// public void keyPressed(KeyEvent e) { if (e.getKeyCode() != KeyEvent.VK_ESCAPE) setText(KeyStrokeUtils.getKeyStrokeDisplayableRepresentation(lastKeyStroke = KeyStroke.getKeyStroke(e.getKeyCode(), 0))); e.consume(); } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} }