Substance client properties

View all API methods.

View all client properties.


Client property name

SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY

Description

Client property name for specifying that a single tab / all tabs of a single tabbed pane / all tabs of all tabbed panes should have close buttons. This property can be specified on a single tab component, on a JTabbedPane itself (will hold for all tab components that don't define this property) or on UIManager. The value should be either Boolean.TRUE or Boolean.FALSE. By default, the close buttons are not displayed.


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.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.BusinessBlackSteelSkin;

/**
 * Test application that shows the use of the
 {@link SubstanceLookAndFeel#TABBED_PANE_CLOSE_BUTTONS_PROPERTY} client
 * property.
 
 @author Kirill Grouchnikov
 @see SubstanceLookAndFeel#TABBED_PANE_CLOSE_BUTTONS_PROPERTY
 */
public class TabbedPaneCloseButtonsProperty extends JFrame {
  /**
   * Creates the main frame for <code>this</code> sample.
   */
  public TabbedPaneCloseButtonsProperty() {
    super("Tabbed pane close buttons");

    this.setLayout(new BorderLayout());

    // create a tabbed pane with few tabs
    final JTabbedPane jtp = new JTabbedPane();
    jtp.addTab("First"new JPanel());
    jtp.addTab("Second"new JPanel());
    jtp.addTab("Third"new JPanel());

    this.add(jtp, BorderLayout.CENTER);

    JPanel controls = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    final JCheckBox allHaveCloseButton = new JCheckBox("All tabs");
    allHaveCloseButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        // based on the checkbox selection, mark the tabbed pane to have
        // close buttons on all tabs
        jtp
            .putClientProperty(
                SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
                allHaveCloseButton.isSelected() ? Boolean.TRUE
                    null);
        jtp.revalidate();
        jtp.repaint();
      }
    });

    final JCheckBox firstHasCloseButton = new JCheckBox("First tab");
    firstHasCloseButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        // based on the checkbox selection, mark the first tab component
        // to have close button
        ((JComponentjtp.getComponentAt(0))
            .putClientProperty(
                SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
                firstHasCloseButton.isSelected() ? Boolean.TRUE
                    null);
        jtp.revalidate();
        jtp.repaint();
      }
    });

    controls.add(allHaveCloseButton);
    controls.add(firstHasCloseButton);
    this.add(controls, BorderLayout.SOUTH);

    this.setSize(400200);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

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

The screenshot below shows tabbed pane with no close buttons (this property is not set):

The screenshot below shows tabbed pane with close button only on the first tab - this property is set to Boolean.TRUE. Note that the mouse is over the third tab which doesn't show the close button:

The screenshot below shows tabbed pane with close buttons on the tabbed pane (all tabs) - this property is set to Boolean.TRUE. Note that the mouse is over the third tab which shows the close button: