Substance API

View all API methods.

View all client properties.

API method

public static void setWidgetVisible(JRootPane rootPane, boolean visible,
      SubstanceWidgetType... substanceWidgets)


Sets the visibility of the specified widget kind(s). If the first rootPane parameter is null, this call applies to all root panes.


  • rootPane - Root pane. May be null.
  • visible - Visibility indication.
  • substanceWidgets - Widget types.

See also

Sample code

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.SubstanceConstants.SubstanceWidgetType;

 * Test application that shows the use of the
 {@link SubstanceLookAndFeel#setWidgetVisible(JRootPane, boolean, SubstanceWidgetType...)}
 * API.
 @author Kirill Grouchnikov
 @see SubstanceLookAndFeel#setWidgetVisible(JRootPane, boolean,
 *      SubstanceWidgetType...)
public class SetWidgetVisible extends JFrame {
   * Creates the main frame for <code>this</code> sample.
  public SetWidgetVisible() {
    super("Set widget visible");

    this.setLayout(new BorderLayout());

    // create sample menu bar with two menus
    JMenuBar jmb = new JMenuBar();
    JMenu menu = new JMenu("menu");
    menu.add(new JMenuItem("test item 1"));
    menu.add(new JMenuItem("test item 2"));
    menu.add(new JMenuItem("test item 3"));
    menu.add(new JMenuItem("test menu item 4"));
    menu.add(new JMenuItem("test menu item 5"));
    menu.add(new JMenuItem("test menu item 6"));

    JMenu menu2 = new JMenu("big");
    for (int i = 0; i < 35; i++)
      menu2.add(new JMenuItem("menu item " + i));


    JPanel controls = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    final JCheckBox showMenuSearchPanels = new JCheckBox(
        "Show menu search panels");
    showMenuSearchPanels.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
    this.add(controls, BorderLayout.SOUTH);


   * The main method for <code>this</code> sample. The arguments are ignored.
   @param args
   *            Ignored.
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        SubstanceLookAndFeel.setSkin(new BusinessBlackSteelSkin());
        new SetWidgetVisible().setVisible(true);

The screenshot below shows application frame with two menus:

The screenshot below shows the result of calling this API with SubstanceWidgetType.MENU_SEARCH widget type. Note the menu search widget after the second menu: