|
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 org.jvnet.substance.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();
String packageName = MenuGutterFillKindProperty.class.getPackage()
.getName();
jtp.addTab("First", new ImageIcon(MenuGutterFillKindProperty.class
.getClassLoader().getResource(
packageName.replace('.', '/') + "/flag_mexico.png")),
new JPanel());
jtp.addTab("Second", new ImageIcon(MenuGutterFillKindProperty.class
.getClassLoader().getResource(
packageName.replace('.', '/') + "/flag_sweden.png")),
new JPanel());
jtp
.addTab("Third", new ImageIcon(MenuGutterFillKindProperty.class
.getClassLoader().getResource(
packageName.replace('.', '/')
+ "/flag_hong_kong.png")), 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.
*/
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:
|