# Klappbare Fenster



## ArtjomZab (21. Apr 2008)

Ich suche nach einer Möglichkeit Fenster ein- und ausklappbar zu machen.
Swing stellt das SplitPanel zur Verfügung, aber das meine ich nicht.

Ich meine diesen Klappmechanismus wie man ihn von netbeans etc. kennt. 
Eine Leiste hat da einen Namen und trägt Symbole zum Schließen bzw. Ein/Auslappen.


----------



## André Uhres (23. Apr 2008)

ArtjomZab hat gesagt.:
			
		

> Ich suche nach einer Möglichkeit Fenster ein- und ausklappbar zu machen


Hier ist eine vereinfachte, selbstgemachte Version. Das Fenster klappt automatisch auf, 
wenn mann mit der Maus über den Button kommt, und automatisch wieder zu, 
wenn man die Maus aus dem Fenster bewegt. Man kann wahlweise das Fenster überlappen lassen oder nicht:

```
package demo;
/*
 * AufklappDemo.java
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class AufklappDemo extends JFrame implements MouseListener, MouseMotionListener {

    private JToolBar toolbar;
    private JButton btTree;
    private JPanel mainPanel;
    private JScrollPane klappPane;
    private JTree tree;
    private DefaultMutableTreeNode root;
    private JTabbedPane tabbedpane;

    public AufklappDemo() {
        super("AufklappDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 400);
        setLocationRelativeTo(null);
        mainPanel = new JPanel(new BorderLayout());
        root = new DefaultMutableTreeNode("Meine Bilder");
        for (int i = 0; i < 30; i++) {
            DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Bild " + i);
            root.add(child1);
        }
        tree = new JTree(root);
        klappPane = new JScrollPane();
        klappPane.setPreferredSize(new Dimension(200, 0));
        klappPane.setViewportView(tree);
        if (JOptionPane.showConfirmDialog(this, "Overlap?") == JOptionPane.YES_OPTION) {
            getLayeredPane().add(klappPane, JLayeredPane.POPUP_LAYER);
            klappPane.setBounds(28, 0, 200, getSize().height - 30);
        } else {
            mainPanel.add(klappPane, BorderLayout.WEST);
        }
        tabbedpane = new JTabbedPane();
        mainPanel.add(tabbedpane);
        tabbedpane.addMouseListener(this);
        tree.addMouseMotionListener(this);
        klappPane.addMouseListener(this);
        tree.addMouseListener(this);
        toolbar = new JToolBar();
        toolbar.setOrientation(JToolBar.VERTICAL);
        toolbar.setFloatable(false);
        toolbar.setRollover(true);
        btTree = new JButton();
        btTree.setFocusable(false);
        btTree.setMaximumSize(new Dimension(22, 60));
        Icon graphicIcon = UIManager.getIcon("Tree.closedIcon");
        btTree.setIcon(graphicIcon);
        toolbar.add(btTree);
        toolbar.setPreferredSize(new Dimension(28, 0));
        getContentPane().add(toolbar, BorderLayout.WEST);
        getContentPane().add(mainPanel);
        btTree.addMouseListener(this);
    }

    public void mousePressed(final MouseEvent e) {
        Object source = e.getSource();
        if (source == tree && e.getClickCount() == 2) {
            openSelected();
            return;
        }
    }

    public void mouseEntered(final MouseEvent e) {
        Object source = e.getSource();
        if (source == btTree) {
            klappPane.setVisible(true);
            klappPane.setBounds(28, 0, 200, getSize().height - 30);
        } else if (source == tabbedpane) {
            klappPane.setVisible(false);
        }
        mainPanel.revalidate();
    }

    private void openSelected() {
        DefaultMutableTreeNode selectedNode =
                (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
        if (selectedNode.isLeaf()) {
            openSelectedDocument(selectedNode);
        }
    }

    private void openSelectedDocument(final DefaultMutableTreeNode node) {
        for (int i = 0; i < tabbedpane.getTabCount(); i++) {
            if (tabbedpane.getTitleAt(i).equals(node.toString())) {
                tabbedpane.setSelectedIndex(i);
                tabbedpane.scrollRectToVisible(tabbedpane.getBoundsAt(i));
                return;
            }
        }
        JPanel panel = new JPanel();
        panel.add(new JLabel(node.toString()));
        tabbedpane.addTab(node.toString(), panel);
        tabbedpane.setSelectedComponent(panel);
        tabbedpane.scrollRectToVisible(tabbedpane.getBoundsAt(tabbedpane.getSelectedIndex()));
    }

    public void mouseDragged(final MouseEvent e) {
    }

    public void mouseMoved(final MouseEvent e) {
    }

    public void mouseExited(final MouseEvent e) {
    }

    public void mouseReleased(final MouseEvent e) {
    }

    public void mouseClicked(final MouseEvent e) {
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new AufklappDemo().setVisible(true);
            }
        });
    }
}
```


----------



## Tobias (23. Apr 2008)

Mit Cross- und Doppelposts machst du dir hier keine Freunde.

http://www.java-forum.org/de/viewtopic.php?t=68141&highlight=


----------

