JXCollapsiblePane

JXCollapsiblePane1 ist von JPanel abgeleitet. Es bietet dessen Funktionalität, kann jedoch bei Bedarf animiert unsichtbar gesetzt werden.

Das Beispiel entstammt in abgewandelter Form der API-Dokumentation zur Klasse. Es zeigt, wie unten dargestellt, einen JXFrame mit BorderLayout, in dessen oberem Teil (NORTH) ein JXCollapsiblePane und im unteren Teil (SOUTH) ein ToggleButton eingebettet sind. Letzterer dient zum abwechselnden Ein- und Ausklappen des JXCollapsiblePane.
Auf dieses ist ein einfaches JPanel gesetzt, das zu Dokumentationszwecken wiederum ein Label und einen funktionslosen Button aufweist. Die Verwendung dieses JPanel ist empfehlenswert. Setzt man die Komponenten direkt auf das kollabierbare Panel, ist seine einwandfreie Funktionalität nicht gewährleistet.
Die Methode JXCollapsiblePane.setAnimated() ermöglicht bei Übergabe des Parameters true eine einfache Animation, indem die Komponente nach oben 'einfährt'. Um diese Funktionalität zu gewährleisten ist es wichtig, dass JXCollapsiblePane in einen LayoutManager eingebettet wird, der die getPreferredSize()-Methode zur Berechnung der Komponentengröße verwendet.

package swing.swingx;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.UIManager;

import org.jdesktop.swingx.JXCollapsiblePane;
import org.jdesktop.swingx.JXFrame;

public class JXCollapsiblePaneBsp {

    public static void main(String[] args) {
        JXFrame frame = new JXFrame("JXCollapsiblePane-Beispiel", true);
        frame.setLayout(new BorderLayout());
        JXCollapsiblePane cp = new JXCollapsiblePane();
        cp.setAnimated(true);
        JLabel label = new JLabel("Text");
        label.setForeground(Color.WHITE);
        JButton butt = new JButton("click");
        JPanel panel = new JPanel(new FlowLayout());
        panel.setOpaque(true);
        panel.setBackground(Color.DARK_GRAY);
        panel.add(label);
        panel.add(butt);
        cp.add(panel);

        Action toggleAction = cp.getActionMap().get(
                JXCollapsiblePane.TOGGLE_ACTION);
        toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON,
                UIManager.getIcon("Tree.collapsedIcon"));
        toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON,
                UIManager.getIcon("Tree.expandedIcon"));
        JToggleButton toggleButt = new JToggleButton(toggleAction);
        toggleButt.setText("");
        
        frame.add(cp, BorderLayout.NORTH);
        frame.add(toggleButt, BorderLayout.SOUTH);
        frame.setStartPosition(JXFrame.StartPosition.CenterInScreen);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

Zur Steuerung der Funktionalität besitzt JXCollapsiblePane ein integriertes Action-Handling, das durch das Feld TOGGLE_ACTION repräsentiert wird. Es wird aus der ActionMap der Komponente ermittelt und an den Steuer-Button übergeben. Vorher werden noch zwei Icons geladen, die in diesem Fall aus dem UIManager ermittelt werden. Dies geschieht durch die Methode putValue(). Die Keys hierfür bilden die Felder COLLAPSE_ICON und EXPAND_ICON der Klasse JXCollapsiblePane.

JXCollapsiblePane expandiert JXCollapsiblePane kollabiert

1) JXCollapsiblePane gehört zur SwingX-Bibliothek, die gesondert in den Classpath eingebunden werden muss. Für weitere Informationen siehe SwingX.