|
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.
|
|
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
((JComponent) jtp.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(400, 200);
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[] args) throws 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:
|