Reputation: 8497
Why is myList empty?
From the output I can see that myList does not have the correct size, yet messages does.
output:
Apr 23, 2012 4:28:42 PM net.bounceme.dur.nntp.MessagesJFrame <init>
INFO: messages 11
Apr 23, 2012 4:28:42 PM net.bounceme.dur.nntp.MessagesJFrame <init>
INFO: myList 0
MessagesJFrame:
package net.bounceme.dur.nntp;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Message;
import javax.swing.DefaultListModel;
public class MessagesJFrame extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
private static final Logger LOG = Logger.getLogger(MessagesJFrame.class.getName());
DefaultListModel<Message> myList = new DefaultListModel<Message>();
public MessagesJFrame() {
initComponents();
EnumNNTP nntp = EnumNNTP.INSTANCE;
List messages = null;
try {
messages = nntp.getMessages(false);
} catch (Exception ex) {
LOG.severe("didn't get messages");
}
myList.copyInto(messages.toArray());
LOG.log(Level.INFO, "messages {0}", messages.size());
LOG.log(Level.INFO, "myList {0}", myList.size());
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane2 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jList1.setModel(myList);
jScrollPane2.setViewportView(jList1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(13, Short.MAX_VALUE)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(129, 129, 129))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(158, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MessagesJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MessagesJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MessagesJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MessagesJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MessagesJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane2;
// End of variables declaration
}
Upvotes: 2
Views: 1432
Reputation: 285405
Where do you add the model to the JList? For a JList to be able to use and display data that's held by a model, the model must be added to the JList either via the JList's constructor or its setModel(...)
method. Have you gone through the JList tutorials? If not, that's the first place you should look as it will explain how to use JLists and then some.
Edit 1
The DefaultListModel copyInto(...)
method does the opposite of what you think it does. It copies the data from the model into the array.
Per the API:
Copies the components of this list into the specified array
Upvotes: 3
Reputation: 8497
In the narrowest sense, the following code populates the model:
fixed method:
public MessagesJFrame() {
initComponents();
EnumNNTP nntp = EnumNNTP.INSTANCE;
List<Message> messages = null;
try {
messages = nntp.getMessages(false);
} catch (Exception ex) {
LOG.severe("didn't get messages");
}
for (Message m : messages) {
myList.addElement(m);
}
LOG.log(Level.INFO, "messages {0}", messages.size());
LOG.log(Level.INFO, "myList {0}", myList.size());
}
However, what's wrong with myList.copyInto(messages.toArray());
?
The above code outputs messages and myList as the same size.
Upvotes: 0