Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pcd.ass01.view;
- import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.io.Serializable;
- import java.lang.reflect.InvocationTargetException;
- import java.util.ArrayList;
- import java.util.Collection;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.SwingUtilities;
- import pcd.ass01.controller.ConcurrentSimulator;
- import pcd.ass01.model.Body;
- public class SimulationViewerControllable extends JFrame implements SimulationViewer {
- /**
- * A unique serial version identifier
- *
- * @see Serializable#serialVersionUID
- */
- private static final long serialVersionUID = 943153832894696460L;
- private JPanel buttonPanel;
- private InfoPanel infoPanel;
- private SimulationPanel visualizerPanel;
- private ConcurrentSimulator simulator;
- public SimulationViewerControllable(int w, int h) {
- setTitle("Bodies simulation");
- setResizable(false);
- visualizerPanel = new SimulationPanel(w, h);
- JButton start = new JButton("Start");
- start.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- simulator.handleStart();
- }
- });
- JButton stop = new JButton("Stop");
- stop.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- simulator.handleStop();
- }
- });
- JButton step = new JButton("Step");
- step.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- simulator.handleStep();
- }
- });
- buttonPanel = new JPanel();
- buttonPanel.add(start, BorderLayout.WEST);
- buttonPanel.add(stop, BorderLayout.CENTER);
- buttonPanel.add(step, BorderLayout.EAST);
- infoPanel = new InfoPanel();
- getContentPane().add(buttonPanel, BorderLayout.NORTH);
- getContentPane().add(infoPanel, BorderLayout.AFTER_LAST_LINE);
- getContentPane().add(visualizerPanel, BorderLayout.AFTER_LAST_LINE);
- setSize(w, h + 3 * start.getHeight());
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent ev) {
- System.exit(-1);
- }
- public void windowClosed(WindowEvent ev) {
- System.exit(-1);
- }
- });
- setVisible(true);
- }
- @Override
- public void display(Collection<Body> bodies, double virtualTime, long iteration) {
- try {
- SwingUtilities.invokeAndWait(() -> {
- visualizerPanel.display(new ArrayList<Body>(bodies));
- infoPanel.display(bodies.size(), virtualTime, iteration);
- });
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- public void setSimulator(ConcurrentSimulator simulator) {
- this.simulator = simulator;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement