/* * Copyright 2012 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.authority; import javax.swing.JComponent; import javax.swing.event.AncestorEvent; import javax.swing.event.AncestorListener; /** * Convenience class to request focus on a component. * * When the component is added to a realized Window then component will * request focus immediately, since the ancestorAdded event is fired * immediately. * * When the component is added to a non realized Window, then the focus * request will be made once the window is realized, since the * ancestorAdded event will not be fired until then. * * Using the default constructor will cause the listener to be removed * from the component once the AncestorEvent is generated. A second constructor * allows you to specify a boolean value of false to prevent the * AncestorListener from being removed when the event is generated. This will * allow you to reuse the listener each time the event is generated. * * @author Rob Camick */ public class RequestFocusListener implements AncestorListener { private boolean removeListener; /* * Convenience constructor. The listener is only used once and then it is * removed from the component. */ public RequestFocusListener() { this(true); } /* * Constructor that controls whether this listen can be used once or * multiple times. * * @param removeListener when true this listener is only invoked once * otherwise it can be invoked multiple times. */ public RequestFocusListener(boolean removeListener) { this.removeListener = removeListener; } @Override public void ancestorAdded(AncestorEvent e) { JComponent component = e.getComponent(); component.requestFocusInWindow(); if (removeListener) component.removeAncestorListener( this ); } @Override public void ancestorMoved(AncestorEvent e) {} @Override public void ancestorRemoved(AncestorEvent e) {} }