JLIst and ListModel

I have a class which implements the ListModel interface which I am trying to use. It works fine when I initialize a JList with it (new JList(myModel)), but when I use the JList.setModel() method to change to another one of my models, it gets messed up. For some reason the addListDataListener() method of my model is not even called. So as a result I have a JList which thinks it has a model, but is not listening for events from that model. Can anyone help me out?

I meant a site where I could upload it, but I geuss I can put the it here.
It is sort of a weird class, about 100 lines and the formatting got messed up, sorry.
public class VectorListModel extends Vector implements ListModel {
      private Vector listeners;     // The ListDataListeners that are listening to this
   private Vector bound; // Vector whose contents should match these
      /** Default no options constructur */
      public VectorListModel() {
     super();
           listeners = new Vector();
      /** Add a ListDataListener to listen for ListDataEvents from this
      * ListDataListener to add.
      public void addListDataListener(ListDataListener l) {
           listeners.add(l);
     System.err.println("DEBUG: VLM adding LDL "+l.toString()+" to "+this.toString());
     System.err.println("DEBUG: VLM new size of listeners "+listeners.size());
   public int getSize() {
     return size();
   public Object getElementAt(int index) {
     return get(index);
      /** Remove a ListDataListener
      * @param l ListDataListener to remove.
      public void removeListDataListener(ListDataListener l) {
           listeners.remove(l);
      /** Adds the specified Object to the data Vector
      * @param o Object to add
      public boolean add(Object o) {
           ListDataEvent lde = new ListDataEvent(this, ListDataEvent.INTERVAL_ADDED, size()+1, size()+1);
           super.add(o);
     System.err.println("DEBUG: VLM adding "+o.toString());
     System.err.println("DEBUG: VLM going to notify "+listeners.size()+" listeners of addition");
     /* Notify all listeners */
           Iterator it = listeners.iterator();
           while(it.hasNext()) {
                ListDataListener ldl = (ListDataListener)it.next();
       System.err.println("DEBUG: VLM Notifying "+ldl.toString()+" of addition of "+o.toString());
                ldl.intervalAdded(lde);
     /* Duplicate the change for all bound Vectors */
     if(bound != null)
       bound.add(o);
     return true;
      /** Removes the specified Object from the data Vector
      * @param o The Object to remove
      public boolean remove(Object o) {
           ListDataEvent lde = new ListDataEvent(this, ListDataEvent.INTERVAL_REMOVED, indexOf(o), indexOf(o));
           super.remove(o);
     /* Notify all listeners */
           Iterator it = listeners.iterator();
           while(it.hasNext()) {
                ListDataListener ldl = (ListDataListener)it.next();
                ldl.intervalRemoved(lde);
     /* Duplicate the change for all bound Vectors */
     if(bound != null)
       bound.remove(o);
     /* FIXME: This should only be true if the vector actually contained o */
     return true;
      /** Replace oldObj with newObj in the data array
      * @param oldObj Old Object to be replaced
      * @param newObj New Object to take oldObj's place
      public void replace(Object oldObj,  Object newObj) {
     ListDataEvent lde = new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, indexOf(oldObj), indexOf(oldObj));
           int index = indexOf(oldObj);
           if(index != -1)
                setElementAt(newObj, index);
     /* Notify all listeners */
     Iterator it = listeners.iterator();
           while(it.hasNext()) {
                ListDataListener ldl = (ListDataListener)it.next();
                ldl.contentsChanged(lde);
     /* Duplicate the change for all bound Vectors */
     if(bound != null)
       bound.setElementAt(newObj, index);
   /** Associates <CODE>v</CODE> with this VectorListModel such that
     * any changes made to this VectorListModel through the add(), remove(),
     * or replace() methods will also be applied to <CODE>v</CODE>
     * @param v The Vector to associate.
   public void bind(Vector v) {
     bound = v;
   /** Disassociate <CODE>v</CODE> from this VectorListModel
     * @param v The Vector to disassociate.
   public void unbind(Vector v) {
     bound = null;
}

Similar Messages

  • JList and ListModel, can anyone explain the basics?

    Hi
    I have an object A containing a Vector X of objects. I want to display them in a JList. I could always use DefaultListModel and copy the items of the Vector X into the default list model using addElement. But that would create a copy of the information in vector X. That is exactly why one should use a custom list model to ensure that the data is in sync with the GUI .
    I want to add and remove items from the JList, and simultaious add and remove items from the Vector X. Can anyone proviede a samll example of how to do this.
    I have tryed myselfe, but I can not get the JList updated with the changes of the listmodel. I have read the documentation about ListDataListener, but I just don't get it. A small example would realy be appreciated!
    // Mattias

    Yse I have read the tutorial. But I don't understand it.
    Here is a small example program. Can anyone change the code so the list is updated with the canges that obviously take place (as one can see by pressing the "Dump button")
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.util.*;
    class ListTest extends JFrame implements ActionListener , ListDataListener {
        JList list;
        MyListModel myListModel;
        MyDataObject myDataObject;
        ListTest() {
            JPanel p = new JPanel();
            myDataObject = new MyDataObject();
            myListModel = new MyListModel(myDataObject.x);
            list = new JList(myListModel);
            myListModel.addListDataListener(this);
            JScrollPane listScrollPane = new JScrollPane(list);
            listScrollPane.setPreferredSize(new Dimension(200, 100));
            p.add(listScrollPane);
            JButton b1 = new JButton("Add");
            b1.addActionListener(this);
            p.add(b1);
            JButton b2 = new JButton("Remove");
            b2.addActionListener(this);
            p.add(b2);
            JButton b3 = new JButton("Dump");
            b3.addActionListener(this);
            p.add(b3);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            getContentPane().add(p);
            pack();
            show();
        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("Add")) {
                myListModel.addElement(""+ (1+myListModel.getSize()) );
                System.out.println("Added a row to the list");
            if (e.getActionCommand().equals("Remove")) {
                if (myListModel.getSize()>0) {
                    myListModel.remove(myListModel.getSize()-1);
                    System.out.println("Removed last element from the list");
                else {
                    System.out.println("No more elements to remove");
            if (e.getActionCommand().equals("Dump")) {
                System.out.println("\n\nData in the list model:");
                for (int i=0; i<myListModel.getSize() ; i++) {
                    System.out.println(myListModel.getElementAt(i));
                System.out.println("That should be the same as the vector x in the object myDataObject  :");
                for (int i=0; i<myListModel.getSize() ; i++) {
                    System.out.println(myDataObject.x.get(i));
        public void contentsChanged(ListDataEvent e) {
            System.out.println("contentsChanged");
        public void intervalAdded(ListDataEvent e) {
            System.out.println("intervalAdded");
        public void intervalRemoved(ListDataEvent e) {
            System.out.println("intervalRemoved");
        public static void main(String args[]) {
            new ListTest();
    class MyDataObject {
        Vector x;
        MyDataObject() {
            x=new Vector();
            x.addElement("1");
            x.addElement("2");
    class MyListModel extends AbstractListModel {
        Vector v;
        MyListModel(Vector v) {
            this.v=v;
        public void addElement(Object o) {
            v.addElement(o);
        public Object remove(int index) {
            return v.remove(index);
        public Object getElementAt(int index) {
            return v.get(index);
        public int getSize() {
            return v.size();
    </pre>

  • Interesting Focus II: JComboBox, 2 JLists and 1 Button

    Hi All,
    Another Interesting Keyboard Focus Question:
    What we want to do?
    Let's say we want to build a JComboBox whose popup contains 2 JLists and a button.
    What we would probably want to do is:
    comboBox.setUI(new MyComboBoxUI());
    MyComboBoxUI will extend BasicComboBoxUI and
    ovveride createPopup to return a BasicComboPopup subclass
    which will add the other JList and JButton.
    (One can argue that this is not a JComboBox anymore, but bare with me)
    Does it work?
    This will work great with the Mouse, but with the Keyboard we face a problem:
    After our popup is displayed, The JComboBox Still Has The Focus - Any UP or DOWN Events are really proccessed by the JComboBox which simulates JList navigation...
    This is happening because the popup is not keyboard-focusable (and so do all of its components)
    Where' s the problem?
    We want to be able to:
    1. Press TAB to navigate thru the 3 components
    2. Press UP and DOWN to navigate the two JLists
    3. Press Space to activate the JButton
    Possible solutions:
    1.
    Don't subclass BasicComboPopup and write a ComboPopup which uses a Focusable JWindow.
    Problem: The JComboBox will lose the focus when the popup opens
    2.
    Simulate all the DOWN/UP/TAB/SPACE events to the popup
    Problem: The components are not focusable, hence there is no indication
    of who is the current focused component
    (Might be solved by surrounding the 'focused' component with a border)
    Your thoughts?
    If you haven't fell asleep by now, you are welcomed to share you ideas, Thanks
    Eyal Katz

    Sorry, I don't understand what you are trying to accomplish. However one line did catch my eye.
    This is happening because the popup is not keyboard-focusable The code in the popupPopup() method in the following post might help:
    http://forum.java.sun.com/thread.jspa?threadID=636842

  • Key pressed in Jlist and selecting the item of key list accordingly

    Hi,
    I have a JList with the items in sorted order.Now I want that if a person presses any key (say K) then the first item starting with K should be selected.Hmmm I can do it by addding a key listener to the list and cheking all the items in the list ,by traversing through the whole lenght of JList and selecting the item if it starts with the character of the key pressed.
    But i was thinking if there is any better way to do that?
    Regards Amin

    see bugid: 4654916 - it does say that the the
    scrolling for the JList should now work with keyboard
    selection.I have the same problem. Thanx for the hint with the bugid. Saw a good workaround there with a simple subclass of JList. Works for me although it is annoying to subclass JList all the time. The bug seems not to be fixed in the 1.4.1 JDK.
    Andreas

  • Problems JList and DefaultListModel

    Hi!
    I've got a problem with the removing of items from a DefaultListModel.
    Assume this:
    public class ImageList extends JList implements DropTargetListener {
    private DefaultListModel dlm = new DefaultListModel();
    public void setListData(ArrayList al) {
    for(...) {
    //do some stuff here
    dlm.addElement(al.get(i));
    this.setModel(dlm);
    }In the main Frameclass are an instance of ImageList and a JButton for deleting a selected item from the list.
    content of the actionPerfomed-method of JButton:
    DefaultListModel model = (DefaultListModel)customContentPane.imageList.getModel();
    int index = customContentPane.imageList.getSelectedIndex();
    if(index!=-1) {
    imageData.remove(index);
    model.remove(index);
    }I'm developing with JBuilder and JDK 1.3.0_02 and there the removing works fine!
    But with JDK 1.4.1-rc-b19 i'm getting an ArrayIndexOutOfBoundsException when i try to delete the last item. The exceptions says index: 0, size: 0!
    But same code works without any problem with 1.3!!
    Does anybody knows a solution?
    Thanks in advance
    Martin

    Its me again!
    After some debugging i found out, the IndexOutOfBoundsException always gives 'Index: -1' back, although an item IS selected!
    And the imageList.getSelectedIndex() returns the true current selected item and not -1.
    Is it a bug in the JList and the DefaultListModel?

  • Consume MouseEvent to prevent JList and JTree from receiving?!

    I have a JTree and a JList where I have made the CellRenderer so that it has a "button" area. When this button is clicked, I want something to happen. This I have achieved just nicely with a MouseListener, as per suggestion from JavaDocs.
    However, the problem is that when a click is deemed to be within the "button", I do not want the tree or list to process it anymore. But doing e.consume(), both on mousePressed or mouseClicked (though it obviously is pressed the JList and JTree themselves listen to) doesn't do jack.
    How can I achieve this functionality?

    da.futt wrote:
    stolsvik wrote:
    Okay, I managed with a hack: It is the order of listeners that's the problem: The ListUI's MouseListener is installed before mine, and hence will get the MouseEvent before me, so it has already processed it when I get it, and hence consuming it makes no difference. No. Normally, listeners are notified latest-registered to earliest-registered. I don't remember seeing an exception to that rule in the core API. well, you are both right (or wrong ;-) - the rule is: the order of listener notification is undefined, it's an implementation detail which listeners must not rely on. "Anecdotical" experience is that AWTListeners are notified first-registered-first-served, while listeners to swing specific events are notified last-registered-first-served. Below is a snippet (formulated in context of SwingX convenience classes, too lazy ...) showing that difference.
    The latter probably stems from hefty c&p of notification by walking the EventListenerList: the earliest code was implemented very near the beginning of Swing when every little drop of assumed performance optimization was squeezed, such as walking from back to front. Using EventListenerList involves lots of code duplication ... so lazy devs as we all are, simply c&p'ed that loop and just changed the concrete event type and method name. More recently, as in the we-use-all-those-nifty-cool-language-features ;-) I've seen more usage of forEach loops (f.i. in beansbinding) so notification is back to first-in-first-served :-)
    Bottom line: don't rely on any sequence - if needed, use an eventBus (or proxy or however it's called) and define the order there. Darryl's suggestion is as close as we can get in Swing (as it's not supported) but not entirely safe: there's no way to get notified when listeners are added/removed and no hook where to plug-in such a bus into the ui-delegate where it would belong.
    Cheers
    Jeanette
    // output
    02.10.2009 14:21:57 org.jdesktop.swingx.event.EventOrderCheck$1 mousePressed
    INFO: first added mouseListener
    02.10.2009 14:21:57 org.jdesktop.swingx.event.EventOrderCheck$2 mousePressed
    INFO: second added mouseListener
    02.10.2009 14:21:58 org.jdesktop.swingx.event.EventOrderCheck$4 valueChanged
    INFO: second added listSelectionListener
    02.10.2009 14:21:58 org.jdesktop.swingx.event.EventOrderCheck$3 valueChanged
    INFO: first added listSelectionListener
    // produced by
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.logging.Logger;
    import javax.swing.JList;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import org.jdesktop.swingx.InteractiveTestCase;
    import org.jdesktop.test.AncientSwingTeam;
    public class EventOrderCheck extends InteractiveTestCase {
        public void interactiveOrderAWTEvent() {
            JList list = new JList(AncientSwingTeam.createNamedColorListModel());
            MouseListener first = new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    LOG.info("first added mouseListener");
            MouseListener second = new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    LOG.info("second added mouseListener");
            list.addMouseListener(first);
            list.addMouseListener(second);
            ListSelectionListener firstSelection = new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent e) {
                    if (e.getValueIsAdjusting()) return;
                    LOG.info("first added listSelectionListener");
            ListSelectionListener secondSelection = new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent e) {
                    if (e.getValueIsAdjusting()) return;
                    LOG.info("second added listSelectionListener");
            list.addListSelectionListener(firstSelection);
            list.addListSelectionListener(secondSelection);
            showWithScrollingInFrame(list, "event order");
        @SuppressWarnings("unused")
        private static final Logger LOG = Logger.getLogger(EventOrderCheck.class
                .getName());
        public static void main(String[] args) {
            EventOrderCheck test = new EventOrderCheck();
            try {
                test.runInteractiveTests();
            } catch (Exception e) {
                e.printStackTrace();
    }

  • DnD between Jlist and Canvas...

    Is it all possible to drag the list item from JList and drop it inside the Canvas and place a reference (e.g. lsit item name ) at the exact coordinates where the drop is performed?
    Additionally, for the purpose of my project the Canvas already contains an image of a model space and would need to stay in the background all along!
    Please if anyone have any thoughts, recomendations, suggestions post these here.
    Thanks

    Please, is drag and drop possible between JList and Canvas components so that the inserted item from JList is displayed over the image displayed in the Canvas component?

  • JTree, JList and file selection

    I have a file selection JPanel that I'm creating that has a JTree on the left representing folders and a JList on the right that should have the files and folders listed to be able to select. I have two problems at this point. First, and more important, when a folder is selected, the JList doesn't update to the files in the new folder and I don't see what's keeping it from working. Second, when clicking on a folder in the JTree, it drops the folder to the end of the list and then lets you expand it to the other folders, also it shows the whole folder path instead of just the folder name.
    This is still my first venture into JTrees and JLists and I'm still really new at JPanel and anything GUI, so my code may not make the most sense, but right now I'm just trying to get it to work.
    Thank you.
    public class FileSelection extends JFrame{
              Container gcp = getContentPane();
              File dir=new File("c:/");
              private JList fileList;
              JTree tree;
              DefaultMutableTreeNode folders;
              String filePath,selectedFile="", path;
              TreePath selPath;
              FileListPanel fileLP;
              FolderListPanel folderLP;
              JScrollPane listScroller;
              public FileSelection(String name){
                   super(name);
                   gcp.setLayout(new BorderLayout());
                   fileLP = new FileListPanel();
                   folderLP = new FolderListPanel();
                   gcp.add(fileLP, BorderLayout.CENTER);
                   gcp.add(folderLP, BorderLayout.WEST);
                   setVisible(true);
              private class FileListPanel extends JPanel implements ActionListener{
                   public FileListPanel(){
                        final JButton selectItem = new JButton("Select");
                        final JButton cancel = new JButton("Cancel");
                        final JButton changeDir = new JButton("Change Directory");
                        //add buttons
                        add(selectItem);
                        add(changeDir);
                        add(cancel);
                        //instantiate buttons
                        selectItem.setActionCommand("SelectItem");
                        selectItem.addActionListener(this);
                        changeDir.setActionCommand("ChangeDirectory");
                        changeDir.addActionListener(this);
                        cancel.setActionCommand("Cancel");
                        cancel.addActionListener(this);
                        final String[] fileArr=dir.list();
                        fileList = new JList(fileArr);
                        fileList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
                        fileList.setLayoutOrientation(JList.VERTICAL_WRAP);
                        fileList.setVisible(true);
                        fileList.setVisibleRowCount(-1);
                        fileList.setSelectedIndex(0);
                        listScroller = new JScrollPane(fileList);
                        listScroller.setPreferredSize(new Dimension(200,200));
                        listScroller.setAlignmentX(LEFT_ALIGNMENT);
                        add(listScroller);
                        MouseListener mouseListener = new MouseAdapter(){
                             public void mouseClicked(MouseEvent e){
                                  if(e.getClickCount()==2){
                                       int itemIndex = fileList.locationToIndex(e.getPoint());
                                       currFile=fileArr[itemIndex];
                                       dispose();
                        fileList.addMouseListener(mouseListener);
                   public void actionPerformed(ActionEvent e){
                        if("SelectItem".equals(e.getActionCommand())){
                             currFile=(String)fileList.getSelectedValue();
                             dispose();
                        }else{
                        if("Cancel".equals(e.getActionCommand())){
                             dispose();
                        }else{
                        if("ChangeDirectory".equals(e.getActionCommand())){
                             ChangeDir cd = new ChangeDir("Select Directory");
                             cd.setSize(new Dimension(300,275));
                             cd.setLocation(500, 225);
              private class FolderListPanel extends JPanel{
                   public FolderListPanel(){
                        String[] files = dir.list();
                        DefaultMutableTreeNode topNode = new DefaultMutableTreeNode("Files");
                        folders = new DefaultMutableTreeNode("C:/");
                        topNode.add(folders);
                        folders = getFolders(dir, folders);
                        tree = new JTree(topNode);
                        tree.setVisible(true);
                        JScrollPane treeScroller = new JScrollPane(tree);
                        treeScroller.setPreferredSize(new Dimension(500,233));
                        treeScroller.setAlignmentX(LEFT_ALIGNMENT);
                        add(treeScroller);
                        MouseListener mouseListener = new MouseAdapter(){
                             public void mouseClicked(MouseEvent e){
                                  try{
                                       if(e.getClickCount()==1){
                                            selPath = tree.getPathForLocation(e.getX(), e.getY());
                                            path=selPath.getLastPathComponent().toString();
                                            dir = new File(path);
                                            TreeNode tn=findNode(folders, path);                    
                                            if(tn!=null){
                                                 folders.add((MutableTreeNode) getTreeNode(dir, (DefaultMutableTreeNode) tn));
                                            tree.updateUI();
                                            final String[] fileArr=dir.list();
                                            fileList = new JList(fileArr);
                                            fileList.updateUI();
                                            listScroller.updateUI();
                                            fileLP = new FileListPanel();
                                  }catch(NullPointerException npe){
                        tree.addMouseListener(mouseListener);
                   public DefaultMutableTreeNode getFolders(File dir, DefaultMutableTreeNode folders){
                        File[] folderList = dir.listFiles();
                        int check=0;
                        for(int x=0;x<folderList.length;x++){
                             if(folderList[x].isDirectory()){
                                  folders.add(new DefaultMutableTreeNode(folderList[x]));               
                        return folders;
                   public TreeNode getTreeNode(File dir, DefaultMutableTreeNode folders){
                        File[] folderList = dir.listFiles();
                        int check=0;
                        for(int x=0;x<folderList.length;x++){
                             if(folderList[x].isDirectory()){
                                  folders.add(new DefaultMutableTreeNode(folderList[x]));               
                        return folders;
                   public TreeNode findNode(DefaultMutableTreeNode folders, String node){
                        Enumeration children = folders.postorderEnumeration();
                        Object current;
                        while(children.hasMoreElements()){
                             current = children.nextElement();
                             if(current.toString().equals(node)){
                                  return (TreeNode)current;
                        return null;
         }

    Wow! I changed the FolderListPanel's mouseListener to:
    tree.addTreeSelectionListener(new TreeSelectionListener(){
                             public void valueChanged(TreeSelectionEvent tse){
                                  DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                                  if(node==null)return;
                                  Object nodeInfo = node.getUserObject();
                                  dir=new File(nodeInfo.toString());
                                  folders.add((MutableTreeNode) getFolders(dir,node));
                        });and it's amazing how much better the tree is!!! But I still don't have the JList part working. I changed the JList and the FileListPanel to public from private, but that didn't change anything.

  • Regarding_Height in JSplitPane in which JList And JTextArea

    Hi All,
    I have JSplitPane in which two components Jlist and JTextArea
    placed . Here when I type the text in JTextArea respective row no
    is appeared in JList.Here my problem is how to set the row hieght
    of both JTextArea and JList to equal size ....
    Can any body have the idea pls help me.
    Thanks in advance

    have you experimented with JTextArea's getRowHeight() and
    JLists's get/setFixedCellHeight()?

  • JList and ALT+MOUSE CLICK to remove item

    Hi,
    How can I create action that is fired when ALT+mouse button is pressed? This should remove item from JList that was clicked. Only thing I can think of is to create MouseAdapter and inside it check if ALT button is pressed. Any other (better) ideas?

    SSCCE
    import java.awt.Dimension;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.DefaultListModel;
    import javax.swing.JFrame;
    import javax.swing.JList;
    public class Run extends JFrame {
         public Run(){
              DefaultListModel listModel = new DefaultListModel();
              listModel.addElement("Element 1");
              listModel.addElement("Element 2");
              listModel.addElement("Element 3");
              JList list = new JList(listModel);
              list.addMouseListener(new RemoveAction(list, listModel));
              add(list);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setPreferredSize(new Dimension(200,200));
              pack();
              setLocationRelativeTo(null);
              setVisible(true);
         public static void main(String[] args) {
              new Run();
    class RemoveAction extends MouseAdapter{
           private JList list;
           private DefaultListModel listModel;
           public RemoveAction(JList list, DefaultListModel listModel){
                this.list = list;
                this.listModel = listModel;
           public void mouseClicked(MouseEvent e){
               if(e.isAltDown()){
                   int index = list.locationToIndex(e.getPoint());
                   if(index>-1)
                        listModel.remove(index);
    }

  • JList and objects

    Howdy,
    Basically, I want to keep track of a list of objects in JList, but I'm not sure how to do this. I can pass a list of objects to the JList using the DefaultListModel, but when I run my program JList doesn't show up anything. Is there anyway to display a specific variable to the user, like a collection of Person objects (which would have first and last names. And we'd like to display by last name)....
    Then the user will be able to select which object they'd like to view/edit the information from this list. I'm also going to have it grow dynamically as the user adds more users to the system.
    Here is some code:
                  DefaultListModel listModel = listModel = new DefaultListModel();
              ATS_Quest testquest = new ATS_Quest();
              testquest.setName("TEST QUEST");
              listModel.addElement(testquest);
              currentQuestList = new JList(listModel);THANKS!!!

    I did look at the API. I use the API quite often and this is the first time where I couldn't find what I needed. Next time please treat me with more respect. If you wish to hear about what documents I've looked at in the API then I will tell you, as well as list the files I've downloaded. I always try to attempt code on my own before asking because I WANT to know how to do things. But sometimes you asking for a little bit of help doesn't hurt and it is what you need to improve and make progress. I'm sorry, I just felt insulted a bit when there really wasn't any reason to do so. I downloaded the two tutorial java files and it still didn't have what I needed. Perhaps I overlooked it, the documentation in the API on the JList is quite a bit. No need to get snappy with me. =)
    Anyways, thanks for your help and I will try this again.

  • JList and JTree

    Hello,
    I have a list of servers in a JList( is a seperate class) and when i am selecting a server name from the JList i am calling this value in my main class and I am trying to use this selected value from the Jlist to create a new JTree node but the value is not being displayed as a node.
    Any body having ideas as to why?
    Reg,
    suri

    Hello,
    Thanks for ur replies. I have tried the following way but still no results the node is not appearing in the JTree.
    Here logon(this is a listBox class and contains a JList with a list of server names)
    and root1 is the parent .
    DefaultMutableTreeNode new1 = new DefaultMutableTreeNode(logon.getValue(), true);
         int childCnt = root1.getChildCount();
         treeModel.insertNodeInto(new1, root1, childCnt);
    treeModel.reload(new1);
    treeModel.nodeStructureChanged(new1);
    JTree1.revalidate();
    JPanel1.revalidate();
    Any body any ideas .
    Thanks,
    reg,
    suri

  • Arrows in a text field / Common scroll for a jlist and a graphic field

    I am developing a software which requires me to dynamically add arrows from one list entry to another(depending on the users respone) in a jlist.
    Is there any method to do that directly or by means of two parralel fields(one for the list and other for the arrows) controlled by a single scroll????
    Cheers!!!

    I don't understand the question, but read the Swing tutorial on "How to Use Lists" which shows the proper way to add and remove items from a JList:
    http://java.sun.com/docs/books/tutorial/uiswing/components/list.html
    If you need further help then you need to create a "Short, Self Contained, Compilable and Executable, Example Program (SSCCE)", that demonstrates the incorrect behaviour.
    http://homepage1.nifty.com/algafield/sscce.html
    Don't forget to use the "Code Formatting Tags", so the posted code retains its original formatting.
    http://forum.java.sun.com/help.jspa?sec=formatting

  • Problem with a JList and JScrollpane

    Hi,
    Im having a problem with horizontal scrolling in that I have a simple JList inside a panel and a text box below where the user enters text. Now the text box has a width of 15, but the user can type as many characters as they want..Now the Jlist only displays 15 characters, but the horizontal scroller does not come up, instead just displays for example abcdefghijkl... (the three dots in the end)..
    Isnt my scroller supposed to be automatically scrolling when there is more on the line then the screen displays?? I already have this so far..
    scroller = new JScrollPane(dataList, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);thanks!

    Try the following code:
    package sample;
    import java.awt.*;
    import javax.swing.*;
    public class MyDialog extends JDialog {
      public static void main( String[] args) {
        new MyDialog().setVisible(true);
      JPanel contentPanel = new JPanel();
      JScrollPane scrollPane = new JScrollPane();
      JList list = new JList( new Object[] {"abcdefghijklmnopqrstuvwxyz", "123456789012345678901234567890"});
      public MyDialog() {
        contentPanel.setLayout(new BorderLayout());
        getContentPane().add(contentPanel);
        contentPanel.add(scrollPane, BorderLayout.CENTER);
        scrollPane.getViewport().add(list, null);   
        setSize( 100,100);
        setLocation( 100,100);
    }Michael

  • Jlist and ensureIndexIsVisible method

    I have a JList that contains 100 elements, and the JList view only shows 10 cells (elements). In order to see the rest of element, the user needs to use the mouse to scroll down the list.
    By the default, I want to select element 12. I use setSelectedIndex(12) method. Yes, the cell is selected. However, the JList doesn't show the selection because the JList view only shows the top 10 cells. So, I use
    ensureIndexIsVisible(12) method to make the cell 12 visible in the view (user doesn't need to scroll down). But, the cell 12 doesn't show on the JList view. What did I do wrong? Or, did I misunderstand how ensureIndexIsVisible does?
    Thank you so much

    ensureIndexIsVisible() is based on the functionality of
    JComponent.scrollRectToVisible(), and I have noticed
    some flakiness with this in that (for whatever reason)
    it is sometimes necessary to call this twice.
    Specifically, the GUI just doesn't respond correctly to the
    first call sometimes. Typically, I have seen this when trying
    to move to the last item in a JList or a
    JTable, and it has something to do with
    the GUI not yet knowing the correct size of the contents
    of the list. By the second time this is called, it seems to
    know. Technically, a second call isn't necessary provided
    that you first force a re-paint of the component as in:
              Rectangle bounds = getBounds();
              bounds.x = 0;
              bounds.y = 0;
              paintImmediately(bounds);and then call scrollRectToVisible() or ensureIndexIsVisible().
    This may not be your problem, but I know I've encountered it.
    b.c

Maybe you are looking for