001 package ui.model; 002 003 import util.*; 004 import ui.renderer.*; 005 006 import java.util.*; 007 import javax.swing.*; 008 import javax.swing.table.*; 009 010 /** A kind of TableModel which display the quasar spectra from an 011 * emission line list 012 */ 013 public class EmissionLineTableModel extends AbstractTableModel { 014 015 List lines; 016 String[] columnNames = {"wavelength", "name", "z(em)", "spectra", "emission lines"}; 017 public static final int WAVELENGTH = 0; 018 public static final int NAME = 1; 019 public static final int Z = 2; 020 public static final int SPECTRA = 3; 021 public static final int EMISSION_LINES = 4; 022 023 /** Initialize the TableModel with Line data 024 */ 025 public EmissionLineTableModel(List someLines) { 026 super(); 027 lines = someLines; 028 } 029 030 public int getRowCount() { 031 return lines.size(); 032 } 033 034 public int getColumnCount() { 035 return columnNames.length; 036 } 037 038 public Class getColumnClass(int columnIndex) { 039 if (columnIndex == SPECTRA) 040 return Star.class; 041 else 042 return super.getColumnClass(columnIndex); 043 } 044 045 // TODO: create graphical representation of quasar emission lines 046 047 public Object getValueAt(int row, int column) { 048 Line line = (Line) lines.get(row); 049 Quasar quasar = (Quasar) line.getSource(); 050 switch (column) { 051 case WAVELENGTH: return new Double(line.getWavelength()); 052 case NAME: return quasar.name; 053 case Z: return quasar.zem; // TODO: return new Double(quasar.getZem()) for sorting 054 case SPECTRA: return (Star) quasar; 055 case EMISSION_LINES: return quasar.getEmissionLines(); 056 default: return null; 057 } 058 } 059 060 public String getColumnName(int column) { 061 return columnNames[column]; 062 } 063 064 // For testing the table model 065 public static void main(String[] args) { 066 JFrame frame = new JFrame("Quasar Emission Lines"); 067 java.awt.Container contentPane = frame.getContentPane(); 068 List emissionLines = null; 069 try { 070 emissionLines = EmissionLines.getEmissionLines(); 071 } catch (Exception e) { 072 System.out.println("Can't read emission lines from file : " + e); 073 System.exit(0); 074 } 075 TableModel model = new EmissionLineTableModel(emissionLines); 076 JTable table = new JTable(model); 077 table.setDefaultRenderer(Star.class, new StarRenderer()); 078 contentPane.add(new JScrollPane(table)); 079 080 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 081 frame.pack(); 082 frame.setVisible(true); 083 } 084 }