DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

+ Reply to Thread
Results 1 to 2 of 2
  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: 4
    Last Post: 10-23-2011, 02:47 PM
  2. Start Stop Button
    By sboothman in forum Java
    Replies: 6
    Last Post: 11-30-2005, 02:12 AM
  3. button listener not working
    By DrunkinP in forum Java
    Replies: 0
    Last Post: 03-31-2005, 09:36 AM
  4. Replies: 0
    Last Post: 11-21-2002, 12:17 AM
  5. Replies: 0
    Last Post: 11-20-2002, 11:16 PM

Bookmarks

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


Top DevX Stories

Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL


Sponsored Links