Como insertar un JTable en un JTabbed

Tengo el siguiente codigo que me genera un JTable con datos de SQL Server
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
public class QueryFrame2 extends JFrame {
    ResultSetTableModelFactory factory;   // Factory para obtener nuestros datos de la tabla
    JTextField query;                     // Campo para capturar el query
    JTable table;                         // Tabla para mostrar los datos
    JLabel msgline; // Para mostrar los mensajes
public QueryFrame2(ResultSetTableModelFactory f) {
 super("QueryFrame2");  // Coloca el titulo de la ventana
 addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) { System.exit(0); }
     });
 this.factory = f;
 query = new JTextField();     // Permite al usuario capturar un query
 table = new JTable();         // Muestra la tabla
 msgline = new JLabel();       // Muestra los mensajes
 Container contentPane = getContentPane();
 contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
 EventQueue.invokeLater(new Runnable() {
  public void run() {
      try {
   String q;
   q = "Select * from Nec_Projects";
   table.setModel(factory.getResultSetTableModel(q));
   msgline.setText(" ");
      }
      catch (SQLException ex) {
   msgline.setText(" ");
   JOptionPane.showMessageDialog(QueryFrame2.this,
             new String[] {  // Muestra un mensaje de 2 lineas
          ex.getClass().getName() + ": ",
          ex.getMessage()
      });
      }
  }
     });
    } // public QueryFrame2(ResultSetTableModelFactory f) {
    public static void main(String args[]) throws Exception {
 ResultSetTableModelFactory factory =
     new ResultSetTableModelFactory(args[0], args[1], args[2], args[3]);
 QueryFrame2 qf = new QueryFrame2(factory);
 qf.setSize(500, 600);
 qf.setVisible(true);
 QueryFrame2 qf2 = new QueryFrame2(factory);
 qf2.setSize(500, 600);
 qf2.setVisible(true);
    }
}
/////////////////////////////////////////////////////////
// Quiero insertar el codigo de arriba en un Tab del siguiente programa:
/////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class ejemploJTabbed extends JFrame{
  // Variables de ejemploJTabbed
  JTextField t1;
  JTable table;
  JTable table2;
  JPanel p1,p2,p3,p4,p5,p6;
  JTabbedPane tb1;
  // encabezados el jtable
  String[] encabezados = {" A "," B "," C "," D "," E "};
  // se introduce este elemento para tener el control de los metodo addRow
  // y removeRow en JTABLE
  //////////////////////////////////////////////////////////
  // AQUI ES DONDE CREO QUE SE DEBE DE INSERTAR LOS DATOS //
  //////////////////////////////////////////////////////////
  DefaultTableModel datos = new DefaultTableModel( new String[][] {
    {"1", "2", "3", "4", "5"}, {"6", "7", "8", "9", "10"} },
    new String[] {"A", "B", "C", "D", "E"});
  DefaultTableModel datos2 = new DefaultTableModel( new String[][] {
    {"10", "12", "13", "14", "15"}, {"16", "17", "18", "19", "20"} },
    new String[] {"F", "G", "H", "I", "J"});
  public ejemploJTabbed() {
        super("Administración de Necesidades de Personal");
        Container c=  getContentPane();
        tb1=new JTabbedPane();
        p1=new JPanel();
        p1.setLayout(new FlowLayout());
        p2=new JPanel();
        p2.setLayout(new FlowLayout());
        p3=new JPanel();
        p3.setLayout(new FlowLayout());
        p4=new JPanel();
        p4.setLayout(new FlowLayout());
        p5=new JPanel();
        p5.setLayout(new FlowLayout());
        p6=new JPanel();
        p6.setLayout(new FlowLayout());
        t1 = new JTextField(10);
        // se crea el jtable y se pasa como parametro en su contructor
        // el modelo de datos para definir encabezados y una fila vacia
        table=new JTable( datos );
        table2=new JTable( datos2 );
        // JScrollPane scrollPane = new JScrollPane(table);
        //Creamos un JscrollPane y le agregamos la JTable
        JScrollPane scrollPane = new JScrollPane(table);
        p1.add(table); // se agregan componentes a los paneles
        p2.add(table2); // se agregan componentes a los paneles
        //se agregar los paneles al JTabbedPane
        tb1.addTab("Parameters",null,p1,"Parameters");
        tb1.addTab("Projects", null,p2,"Projects");
        tb1.addTab("Proposals", null,p3,"Proposals");
        Tb1. AddTab("Percent",...

1 respuesta

Respuesta
1
¿El problema lo tienes en recuperar los datos, en meter los datos en el JTable, o en meter el JTable en el JTabbed? Lo digo para ir acotando, ya que no puedo hacer la prueba completa, ya que no tengo tu BBDD
Ambos programas funcionan, solo que necesito insertar los datos del JTable dentro del JTabbed es decir dentro de un Tab o pestaña. Si agrego la clase QueryFrame2 me envía un mensaje de error de que necesito agregar la sentencia return, pero no estoy muy seguro de como agregar este procedimiento dentro del código de ejemploJTabbed.
Si ya te funciona la clase QueryFrame2, mete este código en el constructor de la clase ejemploJTabbed:
public ejemploJTabbed() { 
        Super("Administración de Necesidades de Personal");

        ResultSetTableModelFactory factory = 
     new ResultSetTableModelFactory(param1 , param2, param3); //NO SE LO QUE TIENES QUE PASAR AHÍ. Imagino que algo relacionado con la bbdd
       QueryFrame2 qf = new QueryFrame2(factory); 
       qf.setSize(500, 600); 
        qf.setVisible(true);

        Container c=  getContentPane(); 
        tb1=new JTabbedPane(); 
        p1=new JPanel(); 
        p1.setLayout(new FlowLayout()); 
        p2=new JPanel(); 
        p2.setLayout(new FlowLayout()); 
        p3=new JPanel(); 
        p3.setLayout(new FlowLayout()); 
        p4=new JPanel(); 
        p4.setLayout(new FlowLayout()); 
        p5=new JPanel(); 
        p5.setLayout(new FlowLayout()); 
        p6=new JPanel(); 
        p6.setLayout(new FlowLayout()); 
        t1 = new JTextField(10); 
        // se crea el jtable y se pasa como parametro en su contructor 
        // el modelo de datos para definir encabezados y una fila vacia 
        table=new JTable( datos ); 
        table2=new JTable( datos2 ); 
        // JScrollPane scrollPane = new JScrollPane(table); 
        //Creamos un JscrollPane y le agregamos la JTable 
        JScrollPane scrollPane = new JScrollPane(table); 
        p1.add(qf); // se agrega el queryFrame2 a la pestaña
        P2.add(table2); // se agregan componentes a los paneles 
        //se agregar los paneles al JTabbedPane 
        tb1. AddTab("Parameters", null, p1,"Parameters");
tb1. AddTab("Projects", null, p2,"Projects");
tb1. AddTab("Proposals", null, p3,"Proposals");
tb1. AddTab("Percent", null, p4,"Percent");
tb1. AddTab("Range", null, p5,"Range");
tb1.addTab("Others", null,p6,"Others"); 
        c.add(tb1); 
        setVisible(true); 
        setSize(600,500); 
        setResizable(false); 
        setLocation(190,150); 
    }

Si no es lo que esperas, explícame lo que no funciona y le damos otra vuelta.
krlosnow:
Modifique la primera clase:
package Necesidades;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
public class QueryFrame2 extends JFrame {
    ResultSetTableModelFactory factory;   // Factory para obtener nuestros datos de la tabla
    JTextField query;                     // Campo para capturar el query
    JTable table;                         // Tabla para mostrar los datos
    JLabel msgline;                       // Para mostrar los mensajes
    public QueryFrame2(ResultSetTableModelFactory f) {
 super("QueryFrame2");  // Coloca el titulo de la ventana
 addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) { System.exit(0); }
     });
 this.factory = f;
 query = new JTextField();     // Permite al usuario capturar un query
 table = new JTable();         // Muestra la tabla
 msgline = new JLabel();       // Muestra los mensajes
 Container contentPane = getContentPane();
 contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
 EventQueue.invokeLater(new Runnable() {
  public void run() {
      try {
   String q;
   q = "Select * from Nec_Projects";
   table.setModel(factory.getResultSetTableModel(q));
   msgline.setText(" ");
      }
      catch (SQLException ex) {
   msgline.setText(" ");
   JOptionPane.showMessageDialog(QueryFrame2.this,
             new String[] {  // Muestra un mensaje de 2 lineas
          ex.getClass().getName() + ": ",
          ex.getMessage()
      });
      }
  }
     });
    } // public QueryFrame2(ResultSetTableModelFactory f) {
//    public static void main(String args[]) throws Exception {
// ResultSetTableModelFactory factory =
//     new ResultSetTableModelFactory(args[0], args[1], args[2], args[3]);
// QueryFrame2 qf = new QueryFrame2(factory);
// qf.setSize(500, 600);
// qf.setVisible(true);
//
// QueryFrame2 qf2 = new QueryFrame2(factory);
// qf2.setSize(500, 600);
// qf2.setVisible(true);

//    }
}
/////////////////////////////////////////////////////
La segunda clase como:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import Necesidades.QueryFrame2;
public class ejemploJTabbed extends JFrame{
  // Variables de ejemploJTabbed
  JTextField t1;
  JTable table;
  JTable table2;
  JPanel p1,p2,p3,p4,p5,p6;
  JTabbedPane tb1;
  // encabezados el jtable
  String[] encabezados = {" A "," B "," C "," D "," E "};
  // se introduce este elemento para tener el control de los metodo addRow
  // y removeRow en JTABLE
  //////////////////////////////////////////////////////////
  // AQUI ES DONDE CREO QUE SE DEBE DE INSERTAR LOS DATOS //
  //////////////////////////////////////////////////////////
  ResultSetTableModelFactory factory =
     new ResultSetTableModelFactory(param1 , param2, param3);
  QueryFrame2 qf = new QueryFrame2(factory);
  qf.setSize(500, 600);
  qf.setVisible(true);
//  DefaultTableModel datos = new DefaultTableModel( new String[][] {
//    {"1", "2", "3", "4", "5"}, {"6", "7", "8", "9", "10"} },
//    new String[] {"A", "B", "C", "D", "E"});
  DefaultTableModel datos2 = new DefaultTableModel( new String[][] {
    {"10", "12", "13", "14", "15"}, {"16", "17", "18", "19", "20"} },
    new String[] {"F", "G", "H", "I", "J"});
  public ejemploJTabbed() {
        super("Administración de Necesidades de Personal");
        Container c=  getContentPane();
        tb1=new JTabbedPane();
        p1=new JPanel();
        p1.setLayout(new FlowLayout());
        p2=new JPanel();
        p2.setLayout(new FlowLayout());
        p3=new JPanel();
        p3.setLayout(new FlowLayout());
        p4=new JPanel();
        p4.setLayout(new FlowLayout());
        p5=new JPanel();
        p5.setLayout(new FlowLayout());
        p6=new JPanel();
        p6.setLayout(new FlowLayout());
        t1 = new JTextField(10);
        // se crea el jtable y se pasa como parametro en su contructor
        // el modelo de datos para definir encabezados y una fila vacia
        table=new JTable( datos );
        table2=new JTable( datos2 );
        // JScrollPane scrollPane = new JScrollPane(table);
        //Creamos un JscrollPane y le agregamos la JTable
        JScrollPane scrollPane = new JScrollPane(table);
        p1.add(qf); // se agregan componentes a los paneles
        p2.add(table2); // se agregan componentes a los paneles
        //se agregar los paneles al JTabbedPane
        tb1.addTab("Parameters",null,p1,"Parameters");
        tb1.addTab("Projects", null,p2,"Projects");
        tb1.addTab("Proposals", null,p3,"Proposals");
        tb1.addTab("Percent", null,p4,"Percent");
        tb1.addTab("Range", null,p5,"Range");
        tb1.addTab("Others", null,p6,"Others");
        c.add(tb1);
        setVisible(true);
        setSize(600,500);
        setResizable(false);
        setLocation(190,150);
    } // public ejemploJTabbed()
  public static void main (String[] args) {
    ejemploJTabbed e= new ejemploJTabbed();
    e.setDefaultCloseOperation(ejemploJTabbed.EXIT_ON_CLOSE);
  } // public static void main (String[] args) {
} // public class ejemploJTabbed extends JFrame{
/////////////////////////////
Pero me envía los siguientes 2 errores que no entiendo:
C:\Tomas\Java\Ejemplo_JTable2\QueryFrame\QueryFrame2.java:9: cannot find symbol
symbol  : class ResultSetTableModelFactory
location: class Necesidades.QueryFrame2
    ResultSetTableModelFactory factory;   // Factory para obtener nuestros datos de la tabla
    ^
C:\Tomas\Java\Ejemplo_JTable2\QueryFrame\QueryFrame2.java:14: cannot find symbol
symbol  : class ResultSetTableModelFactory
location: class Necesidades.QueryFrame2
    public QueryFrame2(ResultSetTableModelFactory f) {
                       ^
2 errors
Saludos y gracias de antemano
¿La clase ResultSetTableModelFactory está en el paquete Necesidades? Si no es así, tendrás que importar dicha clase
Estuve revisando de donde importar esta clase ResultSetTableModelFactory y al parecer es Deprecated:
http://logiciels.x-tnd.be/softs/x-tnd_commons/javadoc/be/xtnd/commons/db/mysql/ResultSetTableModelFactory.html
Es decir esta descontinuada, existe alguna otra clase nueva que pueda utilizar para conectarme con JDBC, ¿este código lo obtuve de un libro de O'Reilly? O de que forma se importa esta clase o como le indico al javac que no tome en cuenta el Deprecated.
Aunque esté deprecated, puedes usarla. El problema es que no la encuentra. ¿El error te da en compilación o en ejecución?
El error me lo da en compilación, después de que le agregue el Package. Ejecutándolo sin Package no envía error y ademas si funciona en ejecución.
¿A qué paquete pertenece la clase ResultSetTableModelFactory? Tendrías que hacer un
Import del paquete al que pertenece la clase, para poder usarla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas