import java.awt.BorderLayout; import java.awt.Container; import java.awt.*; import java.awt.event.*; import java.text.NumberFormat; import javax.swing.JApplet; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; public class TOFApplet extends JApplet implements ActionListener { private JTextArea txt = new JTextArea(10,20); Button calcButton = new Button("Calc!"); Button resetButton = new Button("Reset"); TextField refMass = new TextField("refmass"); TextField refCharge = new TextField("refcharge"); TextField refTime = new TextField("reftime"); class DataModel extends AbstractTableModel { Object[][] data = new Object[10][11]; //Object[] Names = {"Oxygen","Nitrogen","Carbon","Proton","He","H3O+","User","User","User"}; Object[] Names = {"Proton","H3O+","He","Carbon","Nitrogen","Oxygen","User","User","User"}; //Object[] Masses = {new Double(16), new Double(14),new Double(12),new Double(1),new Double(4), new Double(19), new Double(40), " ", " "}; Object[] Masses = {new Double(1), new Double(19),new Double(4),new Double(12),new Double(14), new Double(16), new Double(40), " ", " "}; Object[] maxCharge = {new Double(1), new Double(1), new Double(2), new Double(6), new Double(7), new Double(8), new Double(20), " ", " "}; Object[] colTitle = {"Name","Mass","MaxCharge","1+","2+","3+","4+","5+","6+","7+","8+"}; class TML implements TableModelListener { public void tableChanged(TableModelEvent e) { txt.setText(""); for(int i = 0; i < data.length; i++ ) { for(int j = 0; j < data[0].length; j++ ) txt.append(data[i][j] + " "); txt.append("\n"); } } } public DataModel() { addTableModelListener(new TML()); } public int getColumnCount() { return data[0].length; } public int getRowCount() { return data.length; } public Object getValueAt(int row, int col) { return data[row][col]; } public void setValueAt(Object val, int row, int col) { data[row][col] = val; fireTableDataChanged(); } public boolean isCellEditable(int row, int col) { return true; } } DataModel dat = new DataModel(); public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); JPanel buttonPanel = new JPanel(new FlowLayout()); JPanel tablePanel = new JPanel(); // Fill the elements names and mass for (int j = 0; j < dat.getColumnCount(); j++) { dat.setValueAt(dat.colTitle[j],0,j); } for (int i = 1; i < dat.getRowCount(); i++) { dat.setValueAt(dat.Names[i-1],i,0); dat.setValueAt(dat.Masses[i-1],i,1); dat.setValueAt(dat.maxCharge[i-1],i,2); } Double m, q, TTEMP; // Fill the TOF relative to the ref. for (int i = 1; i < dat.getRowCount(); i++) { q = new Double(0); for(int j = 3; j < 11; j++) { //m = Double.valueOf(dat.getValueAt(i,1).toString()); try{ m= Double.valueOf(dat.getValueAt(i,1).toString()); }catch(NumberFormatException ex) { m = 0.0; } q++; TTEMP = 0.0; //TTEMP = Math.sqrt(RQ*m/(q*RM)); dat.setValueAt(Double.toString(TTEMP),i,j); } } JTable table = new JTable(dat); JScrollPane SPane = new JScrollPane(table); tablePanel.add(SPane); buttonPanel.add(calcButton); buttonPanel.add(refMass); buttonPanel.add(refCharge); buttonPanel.add(refTime); buttonPanel.add(resetButton); cp.add(buttonPanel); cp.add(tablePanel); calcButton.addActionListener(this); resetButton.addActionListener(this); } public void paint(Graphics g) { NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(1); Double RM, RQ, RT, TTEMP, m, q; Double qmax; try{ RM = Double.valueOf(refMass.getText()); }catch(NumberFormatException ex) { RT = 0.0; RM = 1.0; } try{ RQ = Double.valueOf(refCharge.getText()); }catch(NumberFormatException ex) { RT = 0.0; RQ = 1.0; } try{ RT = Double.valueOf(refTime.getText()); }catch(NumberFormatException ex) { RT = 0.0; } // Fill the TOF relative to the ref. for (int i = 1; i < dat.getRowCount(); i++) { try{ qmax = Double.valueOf(dat.getValueAt(i,2).toString()); }catch(NumberFormatException ex) { qmax = 0.0; } if (qmax > 8.0) { qmax = new Double(dat.getColumnCount()); }else { qmax = qmax + 3.0; } q = new Double(0); for(int j = 3; j < qmax; j++) { try{ m = Double.valueOf(dat.getValueAt(i,1).toString()); }catch(NumberFormatException ex) { m = 0.0; } q++; TTEMP = RT*Math.sqrt(RQ*m/(q*RM)); dat.setValueAt(nf.format(TTEMP).toString(),i,j); } for( int j = qmax.intValue(); j < dat.getColumnCount(); j++ ) { m = 0.0; q++; TTEMP = RT*Math.sqrt(RQ*m/(q*RM)); dat.setValueAt(nf.format(TTEMP).toString(),i,j); } } } public void actionPerformed(ActionEvent evt) { if(evt.getSource() == calcButton) { repaint(); } else if(evt.getSource() == resetButton) { refMass.setText("refmass"); refCharge.setText("refcharge"); refTime.setText("reftime"); repaint(); } } public static void main(String[] args) { run(new TOFApplet(), 1000, 200); } public static void run(JApplet applet, int width, int height) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(width, height); applet.init(); applet.start(); frame.setVisible(true); } }