Why the last button cannot be removed?


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 2 of 2

Thread: Why the last button cannot be removed?

  1. #1
    Join Date
    Dec 2005
    Posts
    1

    Why the last button cannot be removed?

    //this is an example in java tutorial:

    import javax.swing.*;

    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;

    import java.awt.event.ContainerEvent;
    import java.awt.event.ContainerListener;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import java.util.Vector;

    public class ContainerEventDemo extends JPanel
    implements ContainerListener,
    ActionListener {
    JTextArea display;
    JPanel buttonPanel;
    JButton addButton, removeButton, clearButton;
    Vector buttonList;
    static final String ADD = "add";
    static final String REMOVE = "remove";
    static final String CLEAR = "clear";
    static final String newline = "\n";

    public ContainerEventDemo() {
    super(new GridBagLayout());
    GridBagLayout gridbag = (GridBagLayout)getLayout();
    GridBagConstraints c = new GridBagConstraints();

    //Initialize an empty list of buttons.
    buttonList = new Vector(10, 10);

    //Create all the components.
    addButton = new JButton("Add a button");
    addButton.setActionCommand(ADD);
    addButton.addActionListener(this);

    removeButton = new JButton("Remove a button");
    removeButton.setActionCommand(REMOVE);
    removeButton.addActionListener(this);

    buttonPanel = new JPanel(new GridLayout(1,1));
    buttonPanel.setPreferredSize(new Dimension(200, 75));
    buttonPanel.addContainerListener(this);

    display = new JTextArea();
    display.setEditable(false);
    JScrollPane scrollPane = new JScrollPane(display);
    scrollPane.setPreferredSize(new Dimension(200, 75));

    clearButton = new JButton("Clear text area");
    clearButton.setActionCommand(CLEAR);
    clearButton.addActionListener(this);

    c.fill = GridBagConstraints.BOTH; //Fill entire cell.
    c.weighty = 1.0; //Button area and message area have equal height.
    c.gridwidth = GridBagConstraints.REMAINDER; //end of row
    gridbag.setConstraints(scrollPane, c);
    add(scrollPane);

    c.weighty = 0.0;
    gridbag.setConstraints(clearButton, c);
    add(clearButton);

    c.weightx = 1.0; //Add/remove buttons have equal width.
    c.gridwidth = 1; //NOT end of row
    gridbag.setConstraints(addButton, c);
    add(addButton);

    c.gridwidth = GridBagConstraints.REMAINDER; //end of row
    gridbag.setConstraints(removeButton, c);
    add(removeButton);

    c.weighty = 1.0; //Button area and message area have equal height.
    gridbag.setConstraints(buttonPanel, c);
    add(buttonPanel);

    setPreferredSize(new Dimension(400, 400));
    setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
    }

    public void componentAdded(ContainerEvent e) {
    displayMessage(" added to ", e);
    }

    public void componentRemoved(ContainerEvent e) {
    displayMessage(" removed from ", e);
    }

    void displayMessage(String action, ContainerEvent e) {
    display.append(((JButton)e.getChild()).getText() //public Component getChild()
    + " was" //Returns the component that was affected by the event.
    + action
    + e.getContainer().getClass().getName() //public Container getContainer()
    + newline);
    display.setCaretPosition(display.getDocument().getLength());
    }

    /*
    * This could have been implemented as two or three
    * classes or objects, for clarity.
    */
    public void actionPerformed(ActionEvent e) {
    String command = e.getActionCommand();

    if (ADD.equals(command)) {
    JButton newButton = new JButton("JButton #"
    + (buttonList.size() + 1));
    buttonList.addElement(newButton);
    buttonPanel.add(newButton);
    buttonPanel.revalidate(); //Make the button show up.

    } else if (REMOVE.equals(command)) {
    int lastIndex = buttonList.size() - 1;
    try {
    JButton nixedButton = (JButton)buttonList.elementAt(lastIndex);
    buttonPanel.remove(nixedButton);
    buttonList.removeElementAt(lastIndex);
    buttonPanel.revalidate(); //Make the button disappear.
    buttonPanel.repaint(); //Make the button disappear. line:127
    //java.awt.Component public void repaint()
    } catch (ArrayIndexOutOfBoundsException exc) {}
    } else if (CLEAR.equals(command)) {
    display.setText("");
    }
    }

    /**
    * Create the GUI and show it. For thread safety,
    * this method should be invoked from the
    * event-dispatching thread.
    */
    private static void createAndShowGUI() {
    //Make sure we have nice window decorations.
    JFrame.setDefaultLookAndFeelDecorated(true);

    //Create and set up the window.
    JFrame frame = new JFrame("ContainerEventDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    JComponent newContentPane = new ContainerEventDemo();
    newContentPane.setOpaque(true); //content panes must be opaque
    frame.setContentPane(newContentPane);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
    }

    public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    createAndShowGUI();
    }
    });
    }
    }
    Masters:
    Now this program can remove all the buttons that are added, but if you comment the 127th line, the last button cannot be removed! Why?
    Please help me!!

  2. #2
    Join Date
    Mar 2004
    Posts
    635
    by not calling repaint() you're thinking the button should be removed? I'm a little confused on what you're trying to accomplish and why.

Similar Threads

  1. Replies: 7
    Last Post: 07-17-2013, 12:47 AM
  2. Start Stop Button
    By sboothman in forum Java
    Replies: 6
    Last Post: 11-30-2005, 03:12 AM
  3. button listener not working
    By DrunkinP in forum Java
    Replies: 0
    Last Post: 03-31-2005, 10:36 AM
  4. Replies: 0
    Last Post: 11-21-2002, 01:17 AM
  5. Replies: 0
    Last Post: 11-21-2002, 12:16 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center