|
Description |
Client property name for specifying that only the close button of a
marked-as-modified tab component should pulsate. 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 animation on modified tabs is on the entire tab rectangle.
Note that this setting is only relevant for tabs marked with
SubstanceLookAndFeel.WINDOW_MODIFIED property.
|
|
Sample code |
import java.awt.*;
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_MODIFIED_ANIMATION}
* client property.
*
* @author Kirill Grouchnikov
* @see SubstanceLookAndFeel#TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION
*/
public class TabbedPaneCloseButtonsModifiedAnimation extends JFrame {
/**
* Creates the main frame for <code>this</code> sample.
*/
public TabbedPaneCloseButtonsModifiedAnimation() {
super("Tabbed pane close buttons modified animation");
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());
// mark the tabbed pane to have close buttons on all tabs
jtp.putClientProperty(
SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
Boolean.TRUE);
this.add(jtp, BorderLayout.CENTER);
JPanel controls = new JPanel(new FlowLayout(FlowLayout.RIGHT));
final JCheckBox firstTabModified = new JCheckBox("First tab modified");
firstTabModified.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Component comp = jtp.getComponentAt(0);
// based on the checkbox selection, mark the first tab component
// to have modified contents
((JComponent) comp).putClientProperty(
SubstanceLookAndFeel.WINDOW_MODIFIED, firstTabModified
.isSelected() ? Boolean.TRUE : null);
jtp.repaint();
}
});
final JCheckBox animationOnCloseButton = new JCheckBox(
"Animation on close button");
animationOnCloseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// based on the checkbox selection, mark the tabbed pane to have
// modified animations on the close button only
jtp
.putClientProperty(
SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION,
animationOnCloseButton.isSelected() ? Boolean.TRUE
: null);
jtp.repaint();
}
});
controls.add(firstTabModified);
controls.add(animationOnCloseButton);
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 TabbedPaneCloseButtonsModifiedAnimation().setVisible(true);
}
});
}
}
The screenshot below shows tabbed pane with first tab marked as
modified (with WINDOW_MODIFIED property).
The modified animation is on the entire tab (this property is not set):
The screenshot below shows tabbed pane with first tab marked as
modified (with WINDOW_MODIFIED property)
and marked with this property set to Boolean.TRUE.
Note that the mouse cursor is over the close button itself to show the
animation colors:
|