Java - Cargar varios registros en un Jtextarea (Jframe)

 
Vista:

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Víctor (10 intervenciones) el 03/09/2019 18:50:45
Hola! Estoy atacasdo en un problema y me gustaría a ver si me podéis ayudar, quiero mostrar varios registros de un tabla(todos), estoy intentando de hacerlo de dos maneras, uno con jtable y por Jtextarea.
Por jtable me pone cada registro en una misma línea lo cual no me sirve porque cada registro posee varias líneas y en Jtextarea, sí me lo muestra bien, pero sólo me muestra uno y no sé cómo hacer para que me muestre todos, este es el código de mi Jtextarea:

1
2
3
4
5
6
7
8
st = reg1.createStatement();
ResultSet result= st.executeQuery(sql);
if (result.next()){
 
    String descripcion = result.getString(1);
    descripcion2.setText(descripcion);
 
}

Llevo días atascado en esto y no sé cómo hacerlo, si sabés otra manera que pueda hacerlo, os agradecería el consejo.
Gracias y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 1.820
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Billy Joel (473 intervenciones) el 03/09/2019 22:08:23
Veo que tienes esta línea
1
st = reg1.createStatement();

Supongo que reg1 es tu conexion.

Supongamos que tienes un método que devuelve una conexión a la base de datos que se llamé connect().
Acá te dejo un método que te va a resolver la vida. Solo tienes que enviar el objeto de JTable que quieres cargar y la consulta SQL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public void cargarTabla(JTable tabla, String sql) {
    Connection cn = null;
    PreparedStatement pst = null;
    ResultSet rs;
    List<String[]> rows = null;
    String[] columnas = null;
    try {
        cn = connect();
        pst = cn.prepareStatement(sql);
        rs = pst.executeQuery();
        int cols = rs.getMetaData().getColumnCount();
        columnas = new String[cols];
        for (int i = 0; i < columnas.length; i++) {
            columnas[i] = rs.getMetaData().getColumnName(i + 1);
        }
        String[] row;
        rows = new ArrayList();
        while (rs.next()) {
            row = new String[cols];
            for (int i = 0; i < row.length; i++) {
                row[i] = rs.getString(i + 1);
            }
            rows.add(row);
        }
    } catch (SQLException ex) {
        ex.printStackTrace(System.out);
    } finally {
        try {
            if (pst != null && !pst.isClosed()) {
                pst.close();
            }
            if (cn != null && !cn.isClosed()) {
                cn.close();
            }
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }
    }
    if (rows != null && !rows.isEmpty() && columnas != null) {
        String[][] data = new String[rows.size()][columnas.length];
        for (int i = 0; i < data.length; i++) {
            data[i] = rows.get(i);
        }
        tabla.setModel(new DefaultTableModel(data, columnas));
    }
}

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Víctor (10 intervenciones) el 04/09/2019 12:58:23
Hola! He probado tu código, pero sigue sin realizarme el salto de línea( por salto de línea es que me ponga la siguiente línea justo debajo, me lo sigue poniendo el registro en la misma línea. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 1.820
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Billy Joel (473 intervenciones) el 04/09/2019 13:13:09
Algo me dice que lo estás haciendo mal. Podrías subir tu código para ver cómo lo estás implementando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Víctor (10 intervenciones) el 04/09/2019 17:54:00
Os paso el código, recuerdo que el problema es que cada uno de los registros de la tabla me guarda los tickets de venta y cuando los muestro desde el jtable me lo muestra todo en una línea, no me respeta los salto de línea:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
con = new conecta();
Connection reg1 = con.getConnection();
 
 
 
DefaultTableModel model = new DefaultTableModel();
 
TableColumnModel columnModel = tabla.getColumnModel();
 
String busque = "";
tabla.setModel(model);
String sql = "select tickets from empresa";
//String[] dato= new String[4];
Statement st;
model.addColumn("Tickets ");
 
columnModel.getColumn(0).setPreferredWidth(50);
tabla.setRowHeight(700);
 
 
 
// tabla.setRowHeight(23);
try {
    st = reg1.createStatement();
    ResultSet result= st.executeQuery(sql);
 
    while (result.next()){
 
        Object[] fila = new Object[1];
        for (int i = 0; i < 1; i++) {
            fila[i]=result.getObject(i+1);
        }
        model.addRow(fila);
    }
 
 
} catch (SQLException ex) {
    Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 1.820
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Billy Joel (473 intervenciones) el 04/09/2019 18:15:33
Voy a suponer que ese extracto de código pertenece a un método... y lo voy a colocar así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void metodo() {
    con = new conecta();
    Connection reg1 = con.getConnection();
    DefaultTableModel model = new DefaultTableModel();
    TableColumnModel columnModel = tabla.getColumnModel();
    String busque = "";
    tabla.setModel(model);
    String sql = "select tickets from empresa";
    //String[] dato= new String[4];
    Statement st;
    model.addColumn("Tickets ");
    columnModel.getColumn(0).setPreferredWidth(50);
    tabla.setRowHeight(700);
 
    // tabla.setRowHeight(23);
    try {
        st = reg1.createStatement();
        ResultSet result = st.executeQuery(sql);
        while (result.next()) {
            Object[] fila = new Object[1];
            for (int index = 0; index < 1; index++) {
                fila[index] = result.getObject(index + 1);
            }
            model.addRow(fila);
        }
    } catch (SQLException ex) {
        Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Voy a suponer que tienes una clase que se llama conecta que tiene los datos de la conexión a la base de datos. Además cuenta con un método getConnection() de devuelve una conexión.

Puedo ver que tienes una consulta a la base de datos: select tickets from empresa Por cierto una sola columna para mostrar en una tabla

Y no estas implementando el método que te pasé, pero no hay problemas... Te lo voy acomodar para que te sirva.
Tu método lo puedes dejar así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public void metodo() {
    cargarTabla(tabla, "select tickets as Tickets from empresa");
    TableColumnModel columnModel = tabla.getColumnModel();
    columnModel.getColumn(0).setPreferredWidth(50);
    tabla.setRowHeight(700);
}
 
public void cargarTabla(JTable tabla, String sql) {
    conecta con = new conecta();
    Connection cn = null;
    PreparedStatement pst = null;
    ResultSet rs;
    List<String[]> rows = null;
    String[] columnas = null;
    try {
        cn = con.getConnection();
        pst = cn.prepareStatement(sql);
        rs = pst.executeQuery();
        int cols = rs.getMetaData().getColumnCount();
        columnas = new String[cols];
        for (int i = 0; i < columnas.length; i++) {
            columnas[i] = rs.getMetaData().getColumnName(i + 1);
        }
        String[] row;
        rows = new ArrayList();
        while (rs.next()) {
            row = new String[cols];
            for (int i = 0; i < row.length; i++) {
                row[i] = rs.getString(i + 1);
            }
            rows.add(row);
        }
    } catch (SQLException ex) {
        ex.printStackTrace(System.out);
    } finally {
        try {
            if (pst != null && !pst.isClosed()) {
                pst.close();
            }
            if (cn != null && !cn.isClosed()) {
                cn.close();
            }
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }
    }
    if (rows != null && !rows.isEmpty() && columnas != null) {
        String[][] data = new String[rows.size()][columnas.length];
        for (int i = 0; i < data.length; i++) {
            data[i] = rows.get(i);
        }
        tabla.setModel(new DefaultTableModel(data, columnas));
    }
}

Creo que así te debe servir.
Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Víctor (10 intervenciones) el 04/09/2019 18:58:55
Me da el mismo resultado, el ticket me lo muestra todo en una línea sin respetar sus saltos de línea en cada celda,
te pongo un ejemplo por si mi explicación no es la correcta:
Así me sale con mi método y con el tuyo:

ticket 2200 hora :13:40 prodcuto 1 producto 2 fin del ticket

y yo quiero que me salga:

ticket 2200
hora 13:40
producto 1
producto 2
fin de ticket

En la bd si entras o si haces un select desde my sql, ya está estructurado tal y como te muestro en la parte de como yo quiero que salga.
Muchísimas gracias por tu atención.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 1.820
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Billy Joel (473 intervenciones) el 04/09/2019 19:11:37
No estoy seguro si estoy comprendiendo lo que quieres hacer, pero...
Podrías hacer un sreenshot del resultado de la consulta select tickets as Tickets from empresa solo para poder entender lo que quieres hacer. El código que te he puesto me funciona y me funciona para cualquier tipo de consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cargar varios registros en un Jtextarea (Jframe)

Publicado por Víctor (10 intervenciones) el 05/09/2019 08:22:44
te adjunto una imagen, lo primero que se ve es como lo veo desde el jtable y la segunda una consulta desde cmd que es como me gustaría verlo en el jtable.

desde-jtable
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de William
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cargar varios registros en un Jtextarea (Jframe)

Publicado por William (4 intervenciones) el 05/09/2019 16:44:03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package graficos;
 
import java.awt.BorderLayout;
 
import javax.swing.JFrame;
import javax.swing.*;
 
public class PruebaJTextArea {
 
	public static void main(String[] args) {
		MarcoPruebaJTextArea m = new MarcoPruebaJTextArea();
		m.setVisible(true);
 
	}
 
}
 
class MarcoPruebaJTextArea extends JFrame{
	public MarcoPruebaJTextArea() {
		setSize(600, 400);
		setLocationRelativeTo(null);
 
		setLayout(new BorderLayout());
 
		JTextArea jta = new JTextArea();
		jta.setLineWrap(true);
 
		String[] col = {"Enero", "Febrero", "Marzo", "Abril", "Mayo"};
 
		int[][] data = new int[5][5];
		for(int i=0; i<data.length; i++) {
			for(int j=0; j<data.length; j++) {
				data[i][j] = i*j;
			}
		}
 
		for(int i=0; i<data.length; i++) {
			jta.setText(jta.getText()+col[i] + ":");
 
			for(int j=0; j<data.length; j++) {
				jta.setText(jta.getText() + "  " + data[i][j]);
			}
			jta.setText(jta.getText()+"\n");
		}
 
		add(jta, BorderLayout.CENTER);
	}
}
 
//Prueba este codigo quizas te ayude y te de una idea
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar