Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / GUI / November 2005

Tip: Looking for answers? Try searching our database.

help adding items to JComboBox on the fly

Thread view: 
William Z. - 02 Nov 2005 21:55 GMT
Anyone happen to see what I might be doing wrong. I'm trying to add
items to my

JComboBox on the fly as nodes are added to the tree. It's like this ...

1. User adds tree nodes to a tree.
2. Then user can select on another node elsewhere in the tree which
renders a JComboBox

and the items just added from step 1 are listed in this box.

I have a few problems ...
- after I select my item in the combobox, the combobox stays there. If
I then select on another node, the item in the combobox doesn't get
selected. It doesn't work where I just select an item and it closes up
and that item is selected.

- sometimes I get a null pointer exception in action performed (because
getSelectedIndex() in getCellEditorValue() returns a -1) which seems to
get called while the program execution is still in the
getTreeCellEditorComponent. This confuses me. Why's it returning -1
when there are items in my combobox?

Any help much appreciated.

(I hope I've got my code snippet here w/o any typos, I had to cut it
down)
----

public class TreeEditor extends AbstractCellEditor implements
TreeCellEditor
{
private JComboBox myComboBox;

public TreeEditor() {
    myComboBox = new JComboBox();

    myComboBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            TreePath path = jTree.getSelectionPath();

                  stopCellEditing();

                   Integer val = (Integer) getCellEditorValue();

                  myComboBox.setSelectedItem(val.intValue());

                   ((MyUserObjectInfo)nodeInfo).setName(
                         myComboBox.getSelectedItem().toString());

                   node.setUserObject(((MyUserObjectInfo) nodeInfo));
                   jTree.getModel().valueForPathChanged(path, nodeInfo);
        }
    });
}

public Object getCellEditorValue() {

    return new Integer(myComboBox.getSelectedIndex());
}

public Component getTreeCellEditorComponent(JTree tree,
    Object value, boolean isSelected, boolean expanded,
        boolean leaf, int row) {

    // find the children of this node that were recently added ...
    TreeModel tModel = jTree.getModel();
       Object root = tModel.getRoot();
       DefaultMutableTreeNode carRoot = (DefaultMutableTreeNode)
        tModel.getChild(root, 0);

       String nodeName = null;

       if (myComboBox.getItemCount() > 0) {
                myComboBox.removeAllItems();
       }

    // add children of another node into this combobox.
       for (Enumeration e = carRoot.children(); e.hasMoreElements();)
{
                DefaultMutableTreeNode carNode =

(DefaultMutableTreeNode)e.nextElement();
                  Object nodeInfo = carNode.getUserObject();
                  nodeName = ((MyUserObjectInfo)nodeInfo).getName();

                  myComboBox.addItem(nodeName);
       }

       if (myComboBox.getItemCount() > 0) {
                  myComboBox.setSelectedIndex(0);
       }

    return myComboBox;
}
}
Martin Bradley - 26 Nov 2005 18:05 GMT
> Anyone happen to see what I might be doing wrong. I'm trying to add
> items to my
[quoted text clipped - 93 lines]
> }
>  

William,

Should your ComboBoxModel not be listening to the table model such that
it gets informed of new items added to the table model?  That are they
are independent classes.

Anyway I'll tell you about my problems with JComboBox as well.  I was
trying to modify the contents of the list in two ways

1) If the user selected the item then that item should be removed.
2) If an external component decided to add/remove an item from the            
   DefaultComboBox model then it should be ok.

The problems I had were (I think) that I decided to use the
ActionListener interface to see whenever the user selected an item, I
should have used ItemListener.

The other problem I notices was that whenever the DefaultComboModel
removed the currently selected item it fires an actionEvent.  This
caused a chain reaction whenever I selected an item in the box.

1.  Select item in the combo box with a mouse.
2.  ActionPerformed method removes the newly selected item
3.  Step 2 causes the DefaultComboBoxModel to fireActionEvent this
causes actionPerformed to be fired.....

cheers,
Marty.


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.