import java.awt.*; import java.awt.event.*; import java.text.DecimalFormat; import javax.swing.*; import javax.swing.event.*; import potential.*; class ConfigFrame extends JFrame implements ActionListener, ChangeListener { final static String CMD_WRAP = "wrap"; final static String CMD_SPAWN = "spawn"; static String NPTS_NAME = "points"; static int NPTS_MIN = 32; static int NPTS_MAX = 1024; static int NPTS_DEFAULT = 200; static String DT_NAME = "dt (s)"; static double DT_MIN = 2e-21; static double DT_MAX = 2e-19; static double DT_DEFAULT = 1e-19; static String XRANGE_NAME = "space width (m)"; static double XRANGE_MIN = 2.4e-10; static double XRANGE_MAX = 2.4e-8; static double XRANGE_DEFAULT = 12e-9; JLabel nptsLabel; JSlider nptsSlider; JLabel nptsValue; JLabel dtLabel; JSlider dtSlider; JLabel dtValue; JLabel xrangeLabel; JSlider xrangeSlider; JLabel xrangeValue; JCheckBox wrapBox; VxEditor vxEditor; JButton spawnButton; Potential Vx; DecimalFormat format; public ConfigFrame() { Create(); SetupEvents(); SetupDefaults(); SetupLayout(); } private void Create() { nptsLabel = new JLabel(NPTS_NAME); nptsSlider = new JSlider(NPTS_MIN, NPTS_MAX); nptsValue = new JLabel("200"); dtLabel = new JLabel(DT_NAME); dtSlider = new JSlider(); dtValue = new JLabel("1.43e-21"); xrangeLabel = new JLabel(XRANGE_NAME); xrangeSlider = new JSlider(); xrangeValue = new JLabel("2.22e-14"); wrapBox = new JCheckBox("Wrap simulation"); vxEditor = new VxEditor(); spawnButton = new JButton("Spawn a simulation"); format = new DecimalFormat("0.00E0"); } private void SetupEvents() { nptsSlider.addChangeListener(this); dtSlider.addChangeListener(this); xrangeSlider.addChangeListener(this); wrapBox.addActionListener(this); wrapBox.setActionCommand(CMD_WRAP); spawnButton.addActionListener(this); spawnButton.setActionCommand(CMD_SPAWN); } private void SetupDefaults() { nptsSlider.setValue(NPTS_DEFAULT); dtSlider.setValue((int)(100 * (DT_DEFAULT - DT_MIN) / (DT_MAX - DT_MIN))); xrangeSlider.setValue((int)(100 * (XRANGE_DEFAULT - XRANGE_MIN) / (XRANGE_MAX - XRANGE_MIN))); wrapBox.setSelected(true); Vx = new Step(); } private void SetupLayout() { Container contents = getContentPane(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); contents.setLayout(gridbag); // npts c.gridx = 0; c.gridy = 0; gridbag.setConstraints(nptsLabel, c); contents.add(nptsLabel); c.gridx = 1; c.gridy = 0; gridbag.setConstraints(nptsSlider, c); contents.add(nptsSlider); c.gridx = 2; c.gridy = 0; gridbag.setConstraints(nptsValue, c); contents.add(nptsValue); // dt c.gridx = 0; c.gridy = 1; gridbag.setConstraints(dtLabel, c); contents.add(dtLabel); c.gridx = 1; c.gridy = 1; gridbag.setConstraints(dtSlider, c); contents.add(dtSlider); c.gridx = 2; c.gridy = 1; gridbag.setConstraints(dtValue, c); contents.add(dtValue); // xrange c.gridx = 0; c.gridy = 2; gridbag.setConstraints(xrangeLabel, c); contents.add(xrangeLabel); c.gridx = 1; c.gridy = 2; gridbag.setConstraints(xrangeSlider, c); contents.add(xrangeSlider); c.gridx = 2; c.gridy = 2; gridbag.setConstraints(xrangeValue, c); contents.add(xrangeValue); // wrap c.gridwidth = 3; c.gridx = 0; c.gridy = 3; gridbag.setConstraints(wrapBox, c); contents.add(wrapBox); // Vx c.gridwidth = 3; c.gridx = 0; c.gridy = 4; gridbag.setConstraints(vxEditor, c); contents.add(vxEditor); // spawn c.gridwidth = 3; c.gridx = 0; c.gridy = 5; gridbag.setConstraints(spawnButton, c); contents.add(spawnButton); } public void actionPerformed(java.awt.event.ActionEvent e) { if (e.getActionCommand().equals(CMD_SPAWN)) { int npts = nptsSlider.getValue(); double dt = DT_MIN + (DT_MAX - DT_MIN) * dtSlider.getValue() / 100; double xrange = XRANGE_MIN + (XRANGE_MAX - XRANGE_MIN) * xrangeSlider.getValue() / 100; WaveVector W = new WaveVector(npts); W.SetGaussian(0.5, 0.0, -xrange/2, xrange/2, 2.0); sim s = new sim( npts, dt, wrapBox.isSelected(), xrange, vxEditor.getPotential(), W.Re, W.Im); DisplayFrame display = new DisplayFrame(s); display.pack(); display.show(); } } public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); int value = source.getValue(); if (source.equals(nptsSlider)) { nptsValue.setText(String.valueOf(value)); } else if (source.equals(dtSlider)) { dtValue.setText(format.format(DT_MIN + (DT_MAX - DT_MIN) * dtSlider.getValue() / 100)); } else if (source.equals(xrangeSlider)) { xrangeValue.setText(format.format(XRANGE_MIN + (XRANGE_MAX - XRANGE_MIN) * xrangeSlider.getValue() / 100)); } } }