C
comci
Gast
Hallo,
nach langem passivem lesen, hätte ich jetzt auch mal wieder eine Frage. Ich bin auf der Suche nach einer passenden Swing Komponente, und zwar etwas in der Art:
(links zugeklappt / rechts aufgeklappt)
Nicht so aufwendig wie im Photoshop, aber eben so, dass man eine Reihe von Components hinzufügen kann. Wobei jede eine Überschrift erhält und wenn man auf die Überschrift Klickt wird die Component ausgeblendet. Ich hoffe das ist verständlich.
Gefunden habe ich leider nichts passenden, was eventuell daran liegen könnten, dass ich nicht weiß wie so eine Komponente heißen könnte. ???:L
Ich hab mir dann gedacht so schwierig kann das doch nicht sein :idea:, nur leider ist es das wohl schon. Und eigentlich wollte ich keinen eigenen LayoutManager schreiben, das muss doch auch einfacher gehen, oder? :?:
Hier meine (nicht funktionierende) Idee:
Bin für jede Hilfe / Anregung dankbar.
Grüße,
Sebastian
nach langem passivem lesen, hätte ich jetzt auch mal wieder eine Frage. Ich bin auf der Suche nach einer passenden Swing Komponente, und zwar etwas in der Art:
(links zugeklappt / rechts aufgeklappt)
Nicht so aufwendig wie im Photoshop, aber eben so, dass man eine Reihe von Components hinzufügen kann. Wobei jede eine Überschrift erhält und wenn man auf die Überschrift Klickt wird die Component ausgeblendet. Ich hoffe das ist verständlich.
Gefunden habe ich leider nichts passenden, was eventuell daran liegen könnten, dass ich nicht weiß wie so eine Komponente heißen könnte. ???:L
Ich hab mir dann gedacht so schwierig kann das doch nicht sein :idea:, nur leider ist es das wohl schon. Und eigentlich wollte ich keinen eigenen LayoutManager schreiben, das muss doch auch einfacher gehen, oder? :?:
Hier meine (nicht funktionierende) Idee:
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JToggleButton;
import javax.swing.border.BevelBorder;
public class JFoldingSidebar extends JPanel {
public JFoldingSidebar() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
}
public JComponent add(JComponent comp, String heading) {
addImpl(packComponent(comp, heading), null, -1);
return comp;
}
public JComponent add(JComponent comp, String heading, int index) {
addImpl(packComponent(comp, heading), null, index);
return comp;
}
private JComponent packComponent(JComponent comp, String heading) {
final JScrollPane scroll = new JScrollPane();
scroll.setViewportView(comp);
final JPanel box = new JPanel(new BorderLayout());
final JToggleButton head = new JToggleButton(heading);
head.setOpaque(true);
head.setBackground(Color.LIGHT_GRAY);
head.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
head.setPreferredSize(new Dimension(head.getPreferredSize().width,26));
head.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//scroll.setVisible(!scroll.isVisible());
if (box.getComponentCount() == 2)
box.remove(scroll);
else
box.add(scroll, BorderLayout.CENTER);
JFoldingSidebar.this.revalidate();
}
});
box.add(head, BorderLayout.NORTH);
box.add(scroll, BorderLayout.CENTER);
return box;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
JFoldingSidebar folding = new JFoldingSidebar();
folding.add(new JSlider(), "Filter1");
folding.add(new JSlider(), "Filter2");
JPanel larger = new JPanel();
larger.add(new JLabel("hello world"));
larger.add(new JLabel("hello world 2"));
folding.add(larger, "Filter3");
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(folding, BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
}
}
Bin für jede Hilfe / Anregung dankbar.
Grüße,
Sebastian