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.*;

import org.jvnet.substance.SubstanceLookAndFeel;

import test.Check;

/**
 * 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", Check.getIcon("flag_mexico")new JPanel());
    jtp.addTab("Second", Check.getIcon("flag_sweden")new JPanel());
    jtp.addTab("Third", Check.getIcon("flag_hong_kong")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.
   @throws Exception
   *             If some exception occured. Note that there is no special
   *             treatment of exception conditions in <code>this</code>
   *             sample code.
   */
  public static void main(String[] argsthrows Exception {
    UIManager.setLookAndFeel(new SubstanceLookAndFeel());
    JFrame.setDefaultLookAndFeelDecorated(true);
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        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: