2012-03-10 21 views
6

tengo la siguiente JTable que utiliza un modelo de mesa:Configuración de encabezados de columna en JTable

http://s17.postimage.org/7zfh3l4lr/Screen_Shot_2012_03_10_at_15_11_31.png

En lugar de utilizar, A, B, C, D, etc. ¿Cómo puedo definir mis propios nombres de tabla. Este es mi código

Aquí está el código para mi modelo de tabla, el marco crea un objeto a partir de este modelo de tabla y lo muestra en un JFrame.

package uk.ac.kcl.inf._4css1pra.spreadsheet; 

import java.awt.Dimension; 
import java.util.HashMap; 
import java.util.Map; 

import javax.swing.table.AbstractTableModel; 

/** 
* @author imdad 
* 
*/ 
public class Spreadsheet extends AbstractTableModel{ 

    private Map data = new HashMap(); 

    public int getColumnCount() 
    { 
     return 7; 
    } 

    /* (non-Javadoc) 
    * @see javax.swing.table.TableModel#getRowCount() 
    */ 
    public int getRowCount() 
    { 
     return 250; 
    } 

    public Object getValueAt(int row, int col) 
    { 
     return data.get(new Dimension(row, col)); 
    } 

    public void setValueAt(Object data, int row, int col) 
    { 
     Dimension coord = new Dimension(row, col); 
     this.data.put(coord, data); 
     fireTableCellUpdated(row, col); 

    } 
} 

Respuesta

9

No está seguro de lo bien que esto no es más que se puede utilizar en lugar de DefaultTableModel AbstractTableModel, que se extiende AbstractTableModel.

Aquí está el código, por ejemplo finalidad:

paquete JTable;

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.UIManager; 
import javax.swing.table.DefaultTableModel; 


public class TableIcon extends JFrame 
{ 
    public TableIcon() 
    { 
     ImageIcon backIcon = getImage("/images/bac.png"); 
     ImageIcon exitIcon = getImage("/images/exit.png"); 
     ImageIcon forwardIcon = getImage("/images/forward.png"); 

     String[] columnNames = {"Picture", "Description"}; 
     Object[][] data = 
     { 
      {backIcon, "BACK"}, 
      {exitIcon, "EXIT"}, 
      {forwardIcon, "FORWARD"}, 
     }; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model) 
     { 
      // Returning the Class of each column will allow different 
      // renderers to be used based on Class 
      public Class getColumnClass(int column) 
      { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     ImageIcon icon = new ImageIcon(getClass().getResource("/images/appIcon.png")); 
     //model.addRow(new Object[]{icon, "Text"}); 
     //model.addRow(data[0]); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

     JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 
    } 

    private ImageIcon getImage(String path) 
    { 
     java.net.URL url = getClass().getResource(path); 
     if (url != null) 
      return (new ImageIcon(url)); 
     else 
     { 
      System.out.println(url); 
      return null; 
     } 
    } 

    public static void main(String[] args) 
    { 
     try 
     { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     TableIcon frame = new TableIcon(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 

Aquí está la salida:

TABLE WITH COLUMN NAMES

+0

+1 para la dirección correcta al usar DefaultTableModel :-) – mKorbel

5

Debe implementar getColumnName para hacerlo.

ver API

private String[] colNames = new String[] {"first", "second", "third"}; 

@Override 
public String getColumnName(int col) { 
    return colNames[col]; 
} 
+1

favor editar el código con 1) setColumnNames(), el código de hablar de AbstractTableModel 2) COLNAMES <> col – mKorbel

+0

@mKorbel a 1) I don' Veo por qué mejoraría el ejemplo. 2) Bueno, por supuesto, ColNames <> col. col es un índice, colNames es una matriz, la combinación de ambos devuelve el nombre, ¿cuál es tu punto? (Perdón si simplemente no lo entiendo.) –

+1

sería mejor leer el código de OP y agregar [método (s) requerido (s)] (http://stackoverflow.com/a/6901508/714968), luego voy a up_vote su Responda aquí, tal vez suggerstion para el uso DefaultTableModel será mejor para OP (entonces se borrarán mis dos comentarios) – mKorbel

Cuestiones relacionadas