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 }