2012-03-10 13 views
6

Ho la seguente JTable che utilizza un modello da tavolo:Impostazione intestazioni delle colonne in JTable

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

Invece di usare, A, B, C, D, ecc come posso definire i miei nomi di tabella. Questo è il mio codice

Questo è il codice per il mio modello di tabella, il frame crea un oggetto da questo modello di tabella e lo visualizza in 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); 

    } 
} 

risposta

9

Non sono sicuro quanto è buono questa cosa è ma è possibile utilizzare al posto di DefaultTableModel AbstractTableModel, che si estende AbstractTableModel.

Qui è il codice per esempio scopo:

pacchetto 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); 
    } 

} 

Ecco l'output:

TABLE WITH COLUMN NAMES

+0

+1 per la giusta direzione usando DefaultTableModel :-) – mKorbel

5

È necessario implementare getColumnName per farlo.

vedere API

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

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

si prega di modificare il codice con 1) setColumnNames(), il codice parla di AbstractTableModel 2) colNames <> col – mKorbel

+0

@mKorbel a 1) I don' vediamo perché avrebbe migliorato l'esempio. 2) Bene, naturalmente colNames <> col. col è un indice, colNames è una matrice la combinazione di entrambi restituisce il nome, qual è il tuo punto? (Scusate se non lo capisco.) –

+1

sarebbe meglio leggere il codice OP e aggiungere i [metodo (i)] richiesti (http://stackoverflow.com/a/6901508/714968), quindi aggiornerò il vostro rispondi qui, forse suggerstion per usare DefaultTableModel sarà migliore per OP (allora entrambi i miei commenti saranno cancellati) – mKorbel

Problemi correlati