/* | |
* 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) {} | |
} |