/* * @(#)SetBuilder.java 0.0.1 99/08/04 * * Copyright (c) 1999 by Willie Wheeler. All rights reserved. */ package stats; import java.util.*; import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.event.*; /** * Component to allow the user to construct a data set from a specifiable * atom pool. * * @version 0.0.1 08/04/99 * @author Willie Wheeler */ public class SetBuilder extends JComponent implements TableModelListener { protected TextVariable[] vars; protected ImageIcon[] atoms; protected Vector atomTable; protected DataTableModel dataOut; public SetBuilder(Vector variables, Vector atoms) { // Convert to arrays. Later I'd prefer to store the variables // and atoms as Vectors, and convert the arrays to Vectors. int numVariables = variables.size(); this.vars = new TextVariable[numVariables]; for (int i = 0; i < numVariables; i++) { this.vars[i] = (TextVariable)variables.get(i); } int numAtoms = atoms.size(); this.atoms = new ImageIcon[numAtoms]; for (int i = 0; i < numAtoms; i++) { this.atoms[i] = (ImageIcon)atoms.get(i); } this.atomTable = buildAtomTable(); updateUI(); dataOut = new DataTableModel(vars, 0); dataOut.addTableModelListener(this); } public SetBuilder(TextVariable[] vars, ImageIcon[] atoms) { this.vars = vars; this.atoms = atoms; this.atomTable = buildAtomTable(); updateUI(); // Build data out. dataOut = new DataTableModel(vars, 0); dataOut.addTableModelListener(this); } protected Vector buildAtomTable() { Vector rows = new Vector(atoms.length); for (int i = 0; i < atoms.length; i++) { StringTokenizer st = new StringTokenizer(atoms[i].getDescription(), ","); Vector rowData = new Vector(vars.length); for (int j = 0; j < vars.length; j++) { rowData.add(new Integer(st.nextToken())); } rows.add(rowData); } return rows; } public void updateUI() { ComponentUI ui = UIManager.getUI(this); setUI(ui); } public String getUIClassID() { return "stats.plaf.SetBuilderUI"; } public TextVariable[] getVariables() { return vars; } public TextVariable getVariable(int index) { return vars[index]; } public ImageIcon[] getAtoms() { return atoms; } public DataTableModel getData() { return dataOut; } public void addAtom(int atomIndex) { dataOut.addRow((Vector)atomTable.get(atomIndex)); } public void removeDatum(int datumIndex) { dataOut.removeRow(datumIndex); } /** * Repaints in response to changes in the data set. * * @param e table model event */ public void tableChanged(TableModelEvent e) { repaint(); } }