JList DefaultListModel ListSelectionListener

Tengo 2 DefaultListModels dentro de un JSplitPane. El lado izquierdo de JSplitPane tiene títulos RssChannel. Cuando se selecciona un título RssChannel, se supone que los títulos RssItem se muestran en el lado derecho de JSplitPane.

La primera vez que se selecciona el título RssChannel aparecen los títulos correctos de RssItem. Pero cuando voy y vengo entre los títulos de RssChannel, los títulos correctos de RssItem no se activan.

¿Cómo puedo arreglar mi Listener para que los títulos correctos de RssItem siempre se activen desde su respectivo RssChannel?

Gracias por cualquier sugerencia

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
import java.io.*;


public class GuiDriver extends JFrame{
    JList channelTitleList, itemTitleList;
    DefaultListModel cModel, iModel;
    List<RssReader> feedList = new ArrayList<RssReader>();
    int nextFeed=0;

    public GuiDriver(){
    }

    public void addFeed(RssReader feed){
       feedList.add(feed);
    }


    public JToolBar createToolBar(){
       JToolBar bar = new JToolBar();
       Action newToolBarButton = new AddAction("New");
       Action deleteToolBarButton = new RemoveAction("Delete");
       Action clearToolBarButton = new ClearAction("Clear");

       bar.add(newToolBarButton);  
       bar.add(deleteToolBarButton);
       bar.add(clearToolBarButton);

       bar.setFloatable(false);      
       return bar;
    }


    public JSplitPane createJSplitPane(){
       JSplitPane hSplitPane  = new JSpli tPane(JSplitPane.HORIZONTAL_SPLIT,createChannelJScrollPane(), createItemJScrollPane());
       hSplitPane.setDividerLocation(500);
       return hSplitPane;
   }


   public JScrollPane createChannelJScrollPane(){            
      cModel = new DefaultListModel(); 
      channelTitleList = new JList(cModel);
      JScrollPane channelJScrollPane = new JScrollPane(channelTitleList);
      channelTitleList.setVisibleRowCount(20);
      channelTitleList.getSelectionModel.addListSelectionListener(new ChannelListListener());      

      return channelJScrollPane;     
   }


   public JScrollPane createItemJScrollPane(){
      iModel = new DefaultListModel();
      itemTitleList = new JList(iModel);
      JScrollPane itemJScrollPane = new JScrollPane(itemTitleList);

      return itemJScrollPane;
   }   


   public class AddAction extends AbstractAction{
      public AddAction(String name){
         super(name);
      }

      public void actionPerformed(ActionEvent e){
         System.out.println(getValue(Action.NAME)+" selected.");
         JOptionPane message = new JOptionPane();
         String firstInput = message.showInputDialog(null, "Enter URL");
         try{
            DumpStockPage.readXml(firstInput);
            File f = new File("RSSFeed.xml");
            addFeed(new RssReader(f));

            cModel.addElement(feedList.get(nextFeed).rssChannel.getTitle());
            nextFeed++;
            iModel.clear();
         }
         catch (IOException ee){
            System.err.println(ee);
         }
      }
   }


   public class RemoveAction extends AbstractAction{
      public RemoveAction(String name){
         super(name);
      }

      public void actionPerformed(ActionEvent e){
         cModel.removeElement(channelTitleList.getSelectedValue());
         feedList.remove(e);
         iModel.clear();
      } 
   }

   public class ClearAction extends AbstractAction{
      public ClearAction(String name){
         super(name);
      }

      public void actionPerformed(ActionEvent e){
         iModel.clear();
      } 
   }


   private class ChannelListListener implements ListSelectionListener {
      public void valueChanged (ListSelectionEvent e) {        
         boolean adjust = e.getValueIsAdjusting();
         if (!adjust) {
            int i = e.getLastIndex();
            for (int j=0; j<feedList.get(i).rssChannel.getItems().size(); j++)
               iModel.addElement(feedList.get(i).rssChannel.items.get(j).getTitle());
         }
      }
   }


   public static void main(String[] args) { 
      EventQueue.invokeLater(new Runnable() { 
         public void run() { 
            GuiDriver frame = new GuiDriver(); 

            frame.setTitle("RSS Reader");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            frame.add(frame.createJSplitPane(), BorderLayout.NORTH);
            frame.add(frame.createToolBar(), BorderLayout.SOUTH);

            frame.setVisible(true);
            frame.setSize(800,400);
         }   
      });  
   }
}
Respuesta 1

Quiero conectarme a mi base de datos MySQL con Java. Estoy usando JDBC y tengo el controlador instalado. (com.mysql.jdbc.Driver) El único problema es que sigo recibiendo un error: com.mysql.jdbc ....

Estoy usando JavaMe. Cada vez que intento inicializar un objeto List recibo el siguiente error: El valor para el atributo nulo no está en el formato correcto. Estoy usando Eclipse y JRE 6 en Mac OSX ...

Cuando inicio Eclipse, mostrará la pantalla de bienvenida brevemente y luego saldrá sin ningún código de error. He buscado en google, baidu y yahoo, no he encontrado una respuesta. Por supuesto, no he encontrado un ...

Estoy probando Google App Engine con JAVA y quiero probar para ejecutar varias instancias en paralelo. Sin embargo, no sé cómo activar instancias múltiples. Intenté ejecutar este Servlet en ...