usar setvalueat nombre muestra encabezados encabezado como columnas agregar java swing jtable jscrollpane jtableheader

java - setvalueat - jtable nombre columnas



Los encabezados de la columna Java JTable no se muestran (2)

Hola chicos, esperaba que pudieran ayudarme, mi código (lógico) es bueno, el único problema es que los encabezados de las columnas no se muestran en las 2 tablas (tabla y tablas, una para el docente y otra para los detalles del alumno). ) ¿cómo los hago mostrar?

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; public class Display { ArrayList<Student> stud1 = new ArrayList<Student>(); ArrayList<SubjectTeacher> sTeach1 = new ArrayList<SubjectTeacher>(); //For Display Teachers private JTable table; private JFrame f; private int i; //For DisplayStudents private JTable tableS; private JFrame fS; private int iS; //Displays Teachers public void displayTeachers() { f = new JFrame("Teachers"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(500,400); f.setVisible(true); String[] columnNames = {"Name", "Surname", "ID", "Pay", "Subject"}; sTeach1 = Stores.getTeach(); i = sTeach1.size(); Object[][] data = new Object[i+1][5]; for (int j = 0; j<sTeach1.size(); j++) { { SubjectTeacher myTeach = sTeach1.get(j); data[j][0] = myTeach.getName(); data[j][1] = myTeach.getSurname(); data[j][2] = myTeach.getID(); data[j][3] = myTeach.getPay(); data[j][4] = myTeach.getSubjectID(); }; } JTable table = new JTable (data, columnNames); f.add(table); } //Displays Students public void displayStudents() { System.out.println(stud1.size()); fS = new JFrame("Students"); fS.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fS.setSize(700,600); fS.setVisible(true); String[] colNames = {"Name", "Surname", "ID", "Computer", "Physics", "Maths", "Tests", "Passes", "Fails"}; stud1 = Stores.getStud(); iS = stud1.size(); Object[][] info = new Object[iS+1][9]; for (int j = 0; j<stud1.size(); j++) { { Student myStud = stud1.get(j); info[j][0] = myStud.getName(); info[j][1] = myStud.getSurname(); info[j][2] = myStud.getID(); info[j][3] = myStud.getSubject(1); info[j][4] = myStud.getSubject(2); info[j][5] = myStud.getSubject(3); info[j][6] = myStud.getTestsTaken(); info[j][7] = myStud.getPasses(); info[j][8] = myStud.getFails(); }; } JTable tableS = new JTable (info, colNames); fS.add(tableS); } }


Si no recuerdo mal, debería poner un contenedor (por ejemplo, un JScrollPane ) a su alrededor.


Aquí está el problema

JTable table = new JTable (data, columnNames); f.add(table);

No agregue la tabla directamente. Use JScrollPane para mostrar los encabezados de la tabla.

f.add(new JScrollPane(table))

¿Por qué necesitas poner la mesa en el JScrollPane ?

De @Dan post:

Cuando coloca el componente dentro del constructor de un JScrollPane , menciona cuál es la vista a la que se aplicará el desplazamiento.

Por otro lado, usando el método add, simplemente agrega un componente a un contenedor, como agregarlo a un JPanel . De esta manera, no especifica el componente para agregar las barras de desplazamiento.

EDITAR: De javadoc (citado por trashgod en la sección de comentarios)

Aquí hay un código típico para crear un panel de desplazamiento que sirve como contenedor para una tabla:

JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);

Las dos líneas en este fragmento hacen lo siguiente: El constructor JScrollPane se invoca con un argumento que hace referencia al objeto de la tabla. Esto crea un panel de desplazamiento como contenedor para la tabla; la tabla se agrega automáticamente al contenedor. JTable.setFillsViewportHeight se invoca para establecer la propiedad fillsViewportHeight. Cuando esta propiedad es verdadera, la tabla usa toda la altura del contenedor, incluso si la tabla no tiene suficientes filas para usar todo el espacio vertical. Esto hace que sea más fácil usar la tabla como un objetivo de arrastrar y soltar. El panel de desplazamiento coloca automáticamente el encabezado de la tabla en la parte superior de la ventana gráfica. Los nombres de columna permanecen visibles en la parte superior del área de visualización cuando se desplazan los datos de la tabla.

Si está utilizando una tabla sin un panel de desplazamiento, debe obtener el componente del encabezado de la tabla y colocarlo usted mismo. Por ejemplo:

container.setLayout(new BorderLayout()); container.add(table.getTableHeader(), BorderLayout.PAGE_START); container.add(table, BorderLayout.CENTER);