001: //WebOnSwing - Web Application Framework
002: //Copyright (C) 2003 Fernando Damian Petrola
003: //
004: //This library is free software; you can redistribute it and/or
005: //modify it under the terms of the GNU Lesser General Public
006: //License as published by the Free Software Foundation; either
007: //version 2.1 of the License, or (at your option) any later version.
008: //
009: //This library is distributed in the hope that it will be useful,
010: //but WITHOUT ANY WARRANTY; without even the implied warranty of
011: //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: //Lesser General Public License for more details.
013: //
014: //You should have received a copy of the GNU Lesser General Public
015: //License along with this library; if not, write to the Free Software
016: //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017:
018: package examples;
019:
020: import java.awt.*;
021: import java.awt.event.*;
022: import java.util.*;
023:
024: import javax.swing.*;
025:
026: public class ContainerEventDemo extends JFrame {
027: public static void main(String[] args) {
028: JFrame theDemo = new ContainerEventDemo();
029:
030: theDemo.addWindowListener(new WindowAdapter() {
031: public void windowClosing(WindowEvent e) {
032: System.exit(0);
033: }
034: });
035:
036: theDemo.pack();
037: theDemo.setVisible(true);
038: }
039:
040: public ContainerEventDemo() {
041: setContentPane(new ContainerEventDemoPanel());
042: }
043:
044: public static class ContainerEventDemoPanel extends JPanel
045: implements ContainerListener, ActionListener {
046: JTextArea display = new JTextArea();
047: JPanel buttonPanel = new JPanel();
048: JButton addButton, removeButton, clearButton;
049: Vector buttonList = new Vector(10, 10);
050: static final String ADD = "add";
051: static final String REMOVE = "remove";
052: static final String CLEAR = "clear";
053: static final String newline = "\n";
054:
055: public ContainerEventDemoPanel() {
056: setBounds(0, 0, 300, 300);
057: init();
058: }
059:
060: public void init() {
061: //Initialize an empty list of buttons.
062:
063: //Create all the components.
064: addButton = new JButton("Add a button");
065: addButton.setActionCommand(ADD);
066: addButton.addActionListener(this );
067:
068: removeButton = new JButton("Remove a button");
069: removeButton.setActionCommand(REMOVE);
070: removeButton.addActionListener(this );
071:
072: buttonPanel.setPreferredSize(new Dimension(200, 75));
073: buttonPanel.addContainerListener(this );
074:
075: display.setEditable(false);
076: JScrollPane scrollPane = new JScrollPane(display);
077: scrollPane.setPreferredSize(new Dimension(200, 75));
078: scrollPane
079: .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
080: scrollPane
081: .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
082:
083: clearButton = new JButton("Clear text area");
084: clearButton.setActionCommand(CLEAR);
085: clearButton.addActionListener(this );
086:
087: //Lay out the components.
088: GridBagLayout gridbag = new GridBagLayout();
089: GridBagConstraints c = new GridBagConstraints();
090: JPanel contentPane = this ;
091: contentPane.setLayout(gridbag);
092: c.fill = GridBagConstraints.BOTH; //Fill entire cell.
093:
094: c.weighty = 1.0; //Button area and message area have equal height.
095: c.gridwidth = GridBagConstraints.REMAINDER; //end of row
096: gridbag.setConstraints(scrollPane, c);
097: contentPane.add(scrollPane);
098:
099: c.weighty = 0.0;
100: gridbag.setConstraints(clearButton, c);
101: contentPane.add(clearButton);
102:
103: c.weightx = 1.0; //Add/remove buttons have equal width.
104: c.gridwidth = 1; //NOT end of row
105: gridbag.setConstraints(addButton, c);
106: contentPane.add(addButton);
107:
108: c.gridwidth = GridBagConstraints.REMAINDER; //end of row
109: gridbag.setConstraints(removeButton, c);
110: contentPane.add(removeButton);
111:
112: c.weighty = 1.0; //Button area and message area have equal height.
113: gridbag.setConstraints(buttonPanel, c);
114: contentPane.add(buttonPanel);
115: }
116:
117: public void componentAdded(ContainerEvent e) {
118: displayMessage(" added to ", e);
119: }
120:
121: public void componentRemoved(ContainerEvent e) {
122: displayMessage(" removed from ", e);
123: }
124:
125: void displayMessage(String action, ContainerEvent e) {
126: display.append(((JButton) e.getChild()).getText() + " was"
127: + action + e.getContainer().getClass().getName()
128: + newline);
129: }
130:
131: /*
132: * This could have been implemented as two or three
133: * classes or objects, for clarity.
134: */
135: public void actionPerformed(ActionEvent e) {
136: String command = e.getActionCommand();
137:
138: if (command == ADD) {
139: JButton newButton = new JButton("JButton #"
140: + (buttonList.size() + 1));
141: buttonList.addElement(newButton);
142: buttonPanel.add(newButton);
143: //buttonPanel.revalidate(); //Make the button show up.
144:
145: } else if (command == REMOVE) {
146: int lastIndex = buttonList.size() - 1;
147: try {
148: JButton nixedButton = (JButton) buttonList
149: .elementAt(lastIndex);
150: buttonPanel.remove(nixedButton);
151: buttonList.removeElementAt(lastIndex);
152: /*
153: buttonPanel.revalidate(); //Make the button disappear.
154: buttonPanel.repaint(); //Make the button disappear.
155: */
156: } catch (ArrayIndexOutOfBoundsException exc) {
157: }
158: } else if (command == CLEAR) {
159: display.setText("");
160: }
161: }
162: }
163: }
|