Path: csiph.com!usenet.pasdenom.info!gegeweb.org!de-l.enfer-du-nord.net!feeder1.enfer-du-nord.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Nigel Wade Newsgroups: comp.lang.java.programmer Subject: Re: NetBeans Application with sortable Table and pre-existing frame/table code Date: Wed, 25 Jul 2012 16:40:20 +0100 Lines: 245 Message-ID: References: <2c4cb42d-92d9-48a6-9d69-0f63c5461070@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: individual.net 3dnbvBjV0q7ZXF+ycQDSrAeIbPjtx/zuBOp/s+U4QfB4mVCVurd/3Xh/OG5VTXyVXg Cancel-Lock: sha1:fHZoK9SzwMt+3/DIMXpsfawV7Qw= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120421 Thunderbird/12.0 In-Reply-To: Xref: csiph.com comp.lang.java.programmer:16348 On 25/07/12 15:54, clusardi2k@aol.com wrote: > How do I get this modified code to work. > > I modified the working/good code from the attached link to the below code. The reason I do not want to use the code exactly on this link is it creates a new window and doesn't use the form that I already am using. The pre-existing form has jPanel1 (swing JPanel) containing jPanel3 (swing JPanel). And, jPanel3 contains jTable1 (swing JTable). > > http://www.java-tips.org/java-se-tips/javax.swing/sorting-and-filtering-tables.html > > (jTable1 was dragged to the form from the swing control palette. Design view shows a table with 4 columns and 4 rows, but the area is blanked out when I run the project!) > > The below code compiles and runs, but the form's jTable1 is not populated with the data. > > Thanks for any help, > > ... > > import java.awt.BorderLayout; > import java.awt.EventQueue; > import javax.swing.*; > import javax.swing.table.DefaultTableModel; > import javax.swing.table.TableModel; > import javax.swing.table.TableRowSorter; > > Runnable runner = new Runnable() { > public void run() { > //JFrame frame = new JFrame("Sorting JTable"); > //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); > Object rows[][] = { > {"AMZN", "Amazon", 41.28}, > {"EBAY", "eBay", 41.57}, > {"GOOG", "Google", 388.33}, > {"MSFT", "Microsoft", 26.56}, > {"NOK", "Nokia Corp", 17.13}, > {"ORCL", "Oracle Corp.", 12.52}, > {"SUNW", "Sun Microsystems", 3.86}, > {"TWX", "Time Warner", 17.66}, > {"VOD", "Vodafone Group", 26.02}, > {"YHOO", "Yahoo!", 37.69} > }; > String columns[] = {"Symbol", "Name", "Price"}; > TableModel model = > new DefaultTableModel(rows, columns) { > public Class getColumnClass(int column) { > Class returnValue; > if ((column>= 0)&& (column< getColumnCount())) { > returnValue = getValueAt(0, column).getClass(); > } else { > returnValue = Object.class; > } > return returnValue; > } > }; > > //JTable table = new JTable(model); > RowSorter sorter = > new TableRowSorter(model); > jTable1.setRowSorter(sorter); > JScrollPane pane = new JScrollPane(jTable1); I don't think you want to be doing this. I presume the jTable1 already exists, and has a parent. > //frame.add(pane, BorderLayout.CENTER); > //frame.setSize(300, 150); > jPanel3.setVisible(true); > jPanel3.add(pane, BorderLayout.CENTER); > jTable1.setVisible(true); > } > }; > EventQueue.invokeLater(runner); > Nowhere that I can see are you setting the new table model in jTable1. The code below works. It's just a basic JFrame app. created in NetBeans, with the code inserted to set the model/sorter for the default table. If you don't change the model the code will throw OOB exception because the model data in the sorter only has 3 columns, and the default table created by Matisse has 4. /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication2; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.RowSorter; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; /** * * @author NetBeans */ public class NewJFrame extends javax.swing.JFrame { /** * Creates new form NewJFrame */ public NewJFrame() { initComponents(); Runnable runner = new Runnable() { public void run() { Object rows[][] = { {"AMZN", "Amazon", 41.28}, {"EBAY", "eBay", 41.57}, {"GOOG", "Google", 388.33}, {"MSFT", "Microsoft", 26.56}, {"NOK", "Nokia Corp", 17.13}, {"ORCL", "Oracle Corp.", 12.52}, {"SUNW", "Sun Microsystems", 3.86}, {"TWX", "Time Warner", 17.66}, {"VOD", "Vodafone Group", 26.02}, {"YHOO", "Yahoo!", 37.69} }; String columns[] = {"Symbol", "Name", "Price"}; TableModel model = new DefaultTableModel(rows, columns) { public Class getColumnClass(int column) { Class returnValue; if ((column >= 0) && (column < getColumnCount())) { returnValue = getValueAt(0, column).getClass(); } else { returnValue = Object.class; } return returnValue; } }; RowSorter sorter = new TableRowSorter(model); jTable1.setModel(model); jTable1.setRowSorter(sorter); } }; EventQueue.invokeLater(runner); } /** * 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") // private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); jScrollPane1.setViewportView(jTable1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE) .addContainerGap()) ); pack(); }// /** * @param args the command line arguments */ public static void main(String args[]) { /* * Set the Nimbus look and feel */ // /* * 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(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } // /* * Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NewJFrame().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration }