RandomSwitch.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package addOns;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import java.util.Hashtable;
  5. import javax.swing.BorderFactory;
  6. import javax.swing.BoxLayout;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JSlider;
  12. import api.AddOn;
  13. import classes.HolonSwitch;
  14. import ui.controller.Control;
  15. public class RandomSwitch implements AddOn {
  16. private double randomChance = 0.5;
  17. private Control control;
  18. private JPanel content = new JPanel();
  19. // To Test the Layout Faster
  20. // public static void main(String[] args)
  21. // {
  22. // JFrame newFrame = new JFrame("exampleWindow");
  23. // RandomSwitch instance = new RandomSwitch();
  24. // newFrame.setContentPane(instance.getAlgorithmPanel());
  25. // newFrame.pack();
  26. // newFrame.setVisible(true);
  27. // newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28. // }
  29. public RandomSwitch(){
  30. content.setLayout(new BorderLayout());
  31. content.add(createParameterPanel(), BorderLayout.CENTER);
  32. JButton buttonRun = new JButton("Run");
  33. buttonRun.addActionListener(actionEvent -> run());
  34. content.add(buttonRun, BorderLayout.PAGE_END);
  35. content.setPreferredSize(new Dimension(300,300));
  36. }
  37. private JPanel createParameterPanel() {
  38. JPanel parameterPanel = new JPanel();
  39. parameterPanel.setLayout(new BoxLayout(parameterPanel, BoxLayout.PAGE_AXIS));
  40. parameterPanel.add(createFlipChanceSlider());
  41. return parameterPanel;
  42. }
  43. private JSlider createFlipChanceSlider() {
  44. JSlider flipChance =new JSlider(JSlider.HORIZONTAL,0, 100, 50);
  45. flipChance.setBorder(BorderFactory.createTitledBorder("FlipChance"));
  46. flipChance.setMajorTickSpacing(50);
  47. flipChance.setMinorTickSpacing(5);
  48. flipChance.setPaintTicks(true);
  49. Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
  50. labelTable.put( new Integer( 0 ), new JLabel("0.0") );
  51. labelTable.put( new Integer( 50 ), new JLabel("0.5") );
  52. labelTable.put( new Integer( 100 ), new JLabel("1.0") );
  53. flipChance.addChangeListener(actionEvent ->randomChance =(double)flipChance.getValue()/100.0);
  54. flipChance.setLabelTable( labelTable );
  55. flipChance.setPaintLabels(true);
  56. return flipChance;
  57. }
  58. private void run() {
  59. for (HolonSwitch s : control.getModel().getSwitches()) {
  60. // Set to Manual Mode
  61. s.setManualMode(true);
  62. // Generate a random number between 0 and 1
  63. double randomDouble = Math.random();
  64. if (randomDouble < randomChance) {
  65. s.setManualState(!s.getManualState());
  66. }
  67. }
  68. control.calculateStateAndVisualForCurrentTimeStep();
  69. control.updateCanvas();
  70. }
  71. @Override
  72. public JPanel getPanel() {
  73. return content;
  74. }
  75. @Override
  76. public void setController(Control control) {
  77. this.control = control;
  78. }
  79. }