Only the last Vector instance of rowData in loadDefaultTableModel is actually being displayed in the actual JTable. Why is that?
Other vectors, with other data, are being instantiated but are not getting added to the model -- apparently. At least they are not being displayed.
How do I ensure that the model contains the desired data? The desired data is output by the Logger, and is in Vector form already. I do not understand the inconsistency.
package net.bounceme.dur.nntp.swing;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Vector;
import java.util.logging.Logger;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import net.bounceme.dur.nntp.gnu.PageMetaData;
import net.bounceme.dur.nntp.gnu.Page;
import net.bounceme.dur.nntp.gnu.Usenet;
public class ArticlesTable extends JScrollPane {
    private static final Logger LOG = Logger.getLogger(ArticlesTable.class.getName());
    private static final long serialVersionUID = 1L;
    private JTable jTable = new JTable();
    private DefaultTableModel defaultTableModel = new DefaultTableModel();
    private Page page;
    private Usenet usenetConnection = Usenet.INSTANCE;
    public ArticlesTable() throws Exception {
        page = new Page();//eh, throws Exception -- fix later
        LOG.fine(page.toString());  //empty Page
        initComponents();
    }
    @SuppressWarnings("unchecked")
    private void initComponents() {
        defaultTableModel = new DefaultTableModel(new Object[][]{
                    {"some", "text"}, {"any", "text"}, {"even", "more"},
                    {"text", "strings"}, {"and", "other"}, {"text", "values"}},
                new Object[]{"Column 1", "Column 2"});
        jTable.setModel(defaultTableModel);
        jTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                itemSelected();
            }
        });
        jTable.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                itemSelected();
            }
        });
        setSize(2000, 2000);  //not sure these lines are quite right, but ok for now
        setViewportView(jTable);
        jTable.setVisible(true);
        setVisible(true);
    }
    private void itemSelected() {
        int row = jTable.getSelectedRow();
        int column = 0;
        Object selectedObject = jTable.getValueAt(row, column);
        int i = (int) selectedObject;
        Map<Integer, Message> messages = page.getMessages();
        Message message = messages.get(i);
        firePropertyChange("message", null, message);
    }
    public final void nextPage() throws Exception {
        LOG.fine("trying to get next page..." + page);
        PageMetaData pageMetaData = page.getPageMetaData();
        pageMetaData.next();  //only changes meta data
        page = usenetConnection.getPage(pageMetaData); //fetches actual data
        LOG.fine("was the page advanced?" + page);  //yes, logs show this
        loadDefaultTableModel();
        LOG.fine(page.toString());
    }
    @SuppressWarnings("unchecked")
    private void loadDefaultTableModel() throws MessagingException {
        LOG.fine("trying to load...");
        defaultTableModel = new DefaultTableModel();
        defaultTableModel.addColumn("index");
        defaultTableModel.addColumn("message subject");
        Vector rowData = new Vector(); //vector?! nothing better?
        Message message = null;
        Map<Integer, Message> messages = page.getMessages(); //sort this
        int key = 0;
        LOG.info("trying to traverse..." + messages.size()); //page meta data determines the size
        for (Entry<Integer, Message> entry : messages.entrySet()) {
            rowData.clear();
            key = entry.getKey();
            message = messages.get(key);
            rowData.add(key);
            rowData.add(message.getSubject());
            LOG.info("vector\t" + key + "\t" + message.getSubject());
            //the vector logs the data which **should** get added
            //to the table model
            defaultTableModel.addRow(rowData);  //adds same row over and over
        }
        jTable.setModel(defaultTableModel);
    }
    private Message getMessage(int i) {
        LOG.fine("trying to get\t\t" + i);
        Map<Integer, Message> messages = page.getMessages();
        Message m = messages.get(i);
        return m;
    }
}
image:

and some of the output:
INFO: trying to traverse...5
Apr 15, 2013 2:05:13 AM net.bounceme.dur.nntp.swing.ArticlesTable loadDefaultTableModel
INFO: vector    25  Re: Netbeans question?
Apr 15, 2013 2:05:13 AM net.bounceme.dur.nntp.swing.ArticlesTable loadDefaultTableModel
INFO: vector    27  Re: Helpppp plzzz
Apr 15, 2013 2:05:13 AM net.bounceme.dur.nntp.swing.ArticlesTable loadDefaultTableModel
INFO: vector    26  Re: writing Unix files on Windows
Apr 15, 2013 2:05:13 AM net.bounceme.dur.nntp.swing.ArticlesTable loadDefaultTableModel
INFO: vector    29  JTextPane.modelToView() exception
Apr 15, 2013 2:05:13 AM net.bounceme.dur.nntp.swing.ArticlesTable loadDefaultTableModel
INFO: vector    28  Java 6 update 39 to 41 balloon
As can be seen, each vector instance has the correct data. However, only the first instance seems to end up in the GUI output. Why?
Is it not getting added to the model correctly? Is the model not updating the table correctly?
Why is the data in the model, as seen in the GUI, mismatched from the logged output?
 
     
     
    