1 package org.glassbox.gui;
2
3 import org.glassbox.SwingFactory;
4
5 import javax.swing.JComponent;
6 import java.awt.LayoutManager;
7 import java.awt.event.ComponentAdapter;
8 import java.awt.event.ComponentEvent;
9
10 /***
11 A layer which lays out its components using a LayoutManager.
12 */
13 public class LayoutLayer implements LayeredGroup.Layer {
14 protected JComponent _view;
15 protected boolean _resize;
16
17 protected LayoutLayer(String themeprefix, boolean resize) {
18 this(null, themeprefix, resize);
19 }
20
21 protected void setLayout(LayoutManager layout) {
22 _view.setLayout(layout);
23 }
24
25 public LayoutLayer(LayoutManager layout, String themeprefix) {
26 this(layout, themeprefix, false);
27 }
28
29 public LayoutLayer(LayoutManager layout, String themeprefix, boolean resize) {
30 _view = SwingFactory.createPanel(themeprefix);
31 _view.setLayout(layout);
32 _view.setEnabled(false);
33 _view.addComponentListener(new ResizeHandler());
34 _resize = resize;
35 }
36
37 public JComponent getView() {
38 return _view;
39 }
40
41 public void addVisible(Visible view, Object constraints) {
42 _view.add(view.getView(), constraints);
43 layout();
44 }
45
46 public void addVisible(Visible view) {
47 _view.add(view.getView());
48 layout();
49 }
50
51 public void removeVisible(Visible view) {
52 _view.remove(view.getView());
53 layout();
54 }
55
56 public void layout() {
57 _view.invalidate();
58 if (_resize)
59 _view.setSize(_view.getLayout().preferredLayoutSize(_view));
60 _view.doLayout();
61 }
62
63 private class ResizeHandler extends ComponentAdapter {
64 public void componentResized(ComponentEvent e) {
65 layout();
66 }
67 }
68 }