NetBeans Application with sortable Table and pre-existing frame/table code

C

clusardi2k

I have an NetBeans application with a few controls. To this, I dragged a Swing Table control from the control palette. I'd like to use all of these and not use the below code.

The reason I don't want to use the below example is I cannot use the dragged in table above. I unsuccessfully tried to modify this code (the frame andtable variable names) to use the above dragged-in table with its pre-existing frame. But, when I try to do that I get error messages such as "non-static method add (...) cannot be referenced from a static context". I even tried instantiating a class object, but received similar error messages.

http://www.java-tips.org/java-se-tips/javax.swing/sorting-and-filtering-tables.html

This linked example creates a table (columns which are sortable) but the new window is not docked anywhere.

Do you have a better example for me.

Thanks,
 
L

Lew

(unknown) said:
I have an NetBeans application with a few controls. To this, I dragged a Swing Table control from the control palette. I'd like to use all of these and not use the below code.

The reason I don't want to use the below example is I cannot use the dragged in table above. I unsuccessfully tried to modify this code (the frame and table variable names) to use the above dragged-in table with its pre-existing frame. But, when I try to do that I get error messages such as "non-static method add (...) cannot be referenced from a static context". I even tried instantiating a class object, but received similar error messages.

Each of those error messages can be solved by analysis and the right code changes.

Giving up on error messages is a recipe for failure.

Where's *your* code?

http://sscce.org/
This linked example creates a table (columns which are sortable) but the new window is not docked anywhere.

Do you have a better example for me.

Do you have a better example for us?
 
C

clusardi2k

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 createsa 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<TableModel> sorter =
new TableRowSorter<TableModel>(model);
jTable1.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(jTable1);
//frame.add(pane, BorderLayout.CENTER);
//frame.setSize(300, 150);
jPanel3.setVisible(true);
jPanel3.add(pane, BorderLayout.CENTER);
jTable1.setVisible(true);
}
};
EventQueue.invokeLater(runner);
 
C

clusardi2k

With the below, line of code I get the same result of no table displayed.

jPanel3.add(pane);
 
C

clusardi2k

The below 2 additional attempts also are failing (each yields the same result). jInternalFrame1 (class JInternalFrame) was dragged to the designer form from the NetBeans swing Palette.

(Another Attempt)
JTable jTable1 = new JTable(model);
RowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(model);
jTable1.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(jTable1);
//frame.add(pane, BorderLayout.CENTER);
//frame.setSize(300, 150);
jInternalFrame1.add(pane, BorderLayout.CENTER);
jInternalFrame1.setVisible(true);


(And Yet Another Unsuccessful Attempt)
//JTable table = new JTable(model);
RowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(model);
jTable1.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(jTable1);
//frame.add(pane, BorderLayout.CENTER);
//frame.setSize(300, 150);
jInternalFrame1.add(pane, BorderLayout.CENTER);
jInternalFrame1.setVisible(true);
 
N

Nigel Wade

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<TableModel> sorter =
new TableRowSorter<TableModel>(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<TableModel> sorter =
new TableRowSorter<TableModel>(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")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
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();
}// </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(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);
}
//</editor-fold>

/*
* 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
}
 
C

clusardi2k

On Wednesday, July 25, 2012 11:40:20 AM UTC-4, Nigel Wade wrote:

It works great.
Thank you,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,992
Messages
2,570,220
Members
46,807
Latest member
ryef

Latest Threads

Top