2010-02-23 13 views
71

Tengo el siguiente código para crear una instancia de JTable: la tabla aparece con el número correcto de filas y columnas, pero no hay ningún signo de los títulos encima de las columnas.JTable no mostrará los encabezados de columna

public Panel1() 
{ 
    int nmbrRows; 

    setLayout(null); 
    setBackground(Color.magenta); 
    Vector colHdrs; 

    //create column headers 

    colHdrs = new Vector(10); 
    colHdrs.addElement(new String("Ticker")); 

    // more statements like the above to establish all col. titles  

    nmbrRows = 25; 
    DefaultTableModel tblModel = new DefaultTableModel(nmbrRows, colHdrs.size()); 
    tblModel.setColumnIdentifiers(colHdrs); 

    scrTbl = new JTable(tblModel); 
    scrTbl.setBounds(25, 50, 950, 600); 
    scrTbl.setBackground(Color.gray); 
    scrTbl.setRowHeight(23);  
    add(scrTbl); 

//rest of constructor 
... 

} 

Comparando esto con otros códigos de fabricación de tablas, no veo que falten pasos, pero algo debe estar ausente.

Respuesta

153

Ponga su JTable dentro de JScrollPane. Prueba esto:

add(new JScrollPane(scrTbl)); 
+5

He descubierto (y usado) esta solución anteriormente, pero tengo curiosidad si alguien sabe * por qué * esto funciona. –

+16

El encabezado de tabla que coloca en el componente superior JScrollPane (o vista superior o algo así se llama) Cuando no hay un componente superior, JTable parece sin cabeza. Esto es por diseño. – OscarRyz

+9

He encontrado este enlace, podría ser útil comprender este problema: http://blog.danieldee.com/2009/07/showing-jtable-header-without-using.html –

19

La principal diferencia entre esta respuesta y la respuesta aceptada es el uso de setViewportView() instead of add().

¿Cómo poner en JTableJScrollPane usando Eclipse IDE:

  1. Crear JScrollPane recipiente a través de la pestaña Diseño.
  2. Estire JScrollPane hasta lograr el tamaño deseado (se aplica al diseño absoluto).
  3. Arrastre y suelte el componente JTable en la parte superior de JScrollPane (área de la vista).

En Structure> Components, table debería ser un hijo de scrollPane. enter image description here

El código generado sería algo como esto:

JScrollPane scrollPane = new JScrollPane(); 
... 

JTable table = new JTable(); 
scrollPane.setViewportView(table); 
6

Como se ha dicho en las respuestas anteriores la forma 'normal' es añadirlo a un JScrollPane, pero a veces no lo quiero para desplazarse (no me preguntes cuándo :)). Luego puede agregar el TableHeader usted mismo. De esta manera:

JPanel tablePanel = new JPanel(new BorderLayout()); 
JTable table = new JTable(); 
tablePanel.add(table, BorderLayout.CENTER); 
tablePanel.add(table.getTableHeader(), BorderLayout.NORTH); 
-1
public table2() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 485, 218); 
    setTitle("jtable"); 
    getContentPane().setLayout(null); 

    String data[][] = { { "Row1/1", "Row1/2", "Row1/3" }, 
      { "Row2/1", "Row2/2", "Row2/3" }, 
      { "Row3/1", "Row3/2", "Row3/3" }, 
      { "Row4/1", "Row4/2", "Row4/3" }, }; 

    String header[] = { "Column 1", "Column 2", "Column 3" }; 

    // Table 
    JTable table = new JTable(data,header); 


    // ScrollPane 
    JScrollPane scrollPane = new JScrollPane(table); 
    scrollPane.setBounds(36, 37, 407, 79); 
    getContentPane().add(scrollPane); 

    } 

}

probar esto !!

+1

'getContentPane(). Add (table);' no tiene sentido aquí. Aparte de eso: esta respuesta no agrega nada en comparación con las respuestas existentes. – Marco13

+0

@chaithra_a, debería proporcionar más descripción de por qué lo hace. – aircraft

Cuestiones relacionadas