org.openide.awt.ToolbarWithOverflow
ToolbarWithOverflow provides a component which is useful for displaying commonly used actions. It adds an overflow button when the toolbar becomes too small to show all the available actions.
org.openide.awt.Toolbar
org-openide-loaders.jar
import java.awt.Component;
import java.awt.Insets;
import java.util.logging.Logger;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalLookAndFeel;
import org.openide.awt.AcceleratorBinding;
import org.openide.awt.ToolbarWithOverflow;
/**
* Toolbar provides a component which is useful for displaying commonly used
* actions. It can be dragged inside its <code>ToolbarPanel</code> to
* customize its location.
*
* @see org.openide.awt.Toobar
*/
public class Toolbar extends ToolbarWithOverflow /*implemented by patchsuperclass MouseInputListener*/ {
static final Logger LOG = Logger.getLogger(Toolbar.class.getName());
/** display name of the toolbar */
private String displayName;
//needed to turn off the painting of toolbar button borders on ocean
private static final boolean isMetalLaF =
MetalLookAndFeel.class.isAssignableFrom(UIManager.getLookAndFeel().getClass());
private static final boolean isFlatLaF =
UIManager.getLookAndFeel().getID().startsWith("FlatLaf");
static final long serialVersionUID = 5011742660516204764L;
static {
try {
Class.forName(AcceleratorBinding.class.getName());
} catch (ClassNotFoundException x) {
throw new ExceptionInInitializerError(x);
}
}
/** Create a new Toolbar with empty name. */
public Toolbar () {
this (""); // NOI18N
}
/** Create a new not floatable Toolbar with programmatic name.
* Display name is set to be the same as name */
public Toolbar (String name) {
this (name, name, false);
}
/** Create a new not floatable Toolbar with specified programmatic name
* and display name */
public Toolbar (String name, String displayName) {
this (name, displayName, false);
}
/** Create a new <code>Toolbar</code>.
* @param name a <code>String</code> containing the associated name
* @param f specified if Toolbar is floatable
* Display name of the toolbar is set equal to the name.
*/
public Toolbar (String name, boolean f) {
this (name, name, f);
}
private JButton label;
@Override
public boolean isOpaque() {
if( null != UIManager.get("NbMainWindow.showCustomBackground") ) //NOI18N
return !UIManager.getBoolean("NbMainWindow.showCustomBackground"); //NOI18N
return super.isOpaque();
}
private static final Insets emptyInsets = new Insets(1,1,1,1);
/** Overridden to set focusable to false for any AbstractButton
* subclasses which are added */
@Override
protected void addImpl(Component c, Object constraints, int idx) {
//issue 39896, after opening dialog from toolbar button, focus
//remains on toolbar button. Does not create an accessibility issue -
//all standard toolbar buttons are also available via the keyboard
if (c instanceof AbstractButton) {
c.setFocusable(false);
((JComponent) c).setOpaque(false);
if (isMetalLaF) {
//metal/ocean resets borders, so fix it this way
((AbstractButton) c).setBorderPainted(false);
((AbstractButton) c).setOpaque(false);
}
//This is active for GTK L&F. It should be fixed in JDK
//but it is not fixed in JDK 6.0.
if (!isMetalLaF && !isFlatLaF) {
((AbstractButton) c).setMargin( emptyInsets );
}
if( null != label && c != label ) {
remove( label );
label = null;
}
} else if( c instanceof JToolBar.Separator ) {
JToolBar.Separator separator = (JToolBar.Separator)c;
if (getOrientation() == SwingConstants.VERTICAL) {
separator.setOrientation(SwingConstants.HORIZONTAL);
} else {
separator.setOrientation(SwingConstants.VERTICAL);
}
}
super.addImpl (c, constraints, idx);
}
/**
* Create a new <code>Toolbar</code>.
* @param name a <code>String</code> containing the associated name
* @param f specified if Toolbar is floatable
*/
public Toolbar (String name, String displayName, boolean f) {
super();
setDisplayName (displayName);
initAll(name, f);
}
private void initAll(String name, boolean f) {
setName (name);
setFloatable (f);
getAccessibleContext().setAccessibleName(displayName == null ? getName() : displayName);
getAccessibleContext().setAccessibleDescription(getName());
}
@Override
public String getUIClassID() {
if (UIManager.get("Nb.Toolbar.ui") != null) { //NOI18N
return "Nb.Toolbar.ui"; //NOI18N
} else {
return super.getUIClassID();
}
}
/** @return Display name of this toolbar. Display name is localizable,
* on the contrary to the programmatic name */
public String getDisplayName () {
return displayName;
}
/** Sets new display name of this toolbar. Display name is localizable,
* on the contrary to the programmatic name */
public void setDisplayName (String displayName) {
this.displayName = displayName;
}
} // end of class Toolbar