|
@@ -17,18 +17,23 @@ import java.awt.event.*;
|
|
*
|
|
*
|
|
* @author Gruppe14
|
|
* @author Gruppe14
|
|
*/
|
|
*/
|
|
-public class TimePanel extends JPanel {
|
|
|
|
|
|
+public class TimePanel extends JPanel implements ActionListener{
|
|
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
+ private static final int MAX_ITERATIONS=100000;
|
|
final JButton playBtn = new JButton();
|
|
final JButton playBtn = new JButton();
|
|
final JButton timeResetBtn = new JButton();
|
|
final JButton timeResetBtn = new JButton();
|
|
final JButton timeForwardBtn = new JButton();
|
|
final JButton timeForwardBtn = new JButton();
|
|
- ;
|
|
|
|
|
|
+
|
|
final JButton timeBackwardBtn = new JButton();
|
|
final JButton timeBackwardBtn = new JButton();
|
|
|
|
+ JTextField iterationsField;
|
|
|
|
+ final JLabel iterationsLabel=new JLabel(" Iterations ");
|
|
private final JPanel btnAndSpeedPanel = new JPanel();
|
|
private final JPanel btnAndSpeedPanel = new JPanel();
|
|
private final JPanel speedPanel = new JPanel();
|
|
private final JPanel speedPanel = new JPanel();
|
|
private final JPanel timeBtnPanel = new JPanel();
|
|
private final JPanel timeBtnPanel = new JPanel();
|
|
- JSlider timeSlider = new JSlider() {
|
|
|
|
|
|
+ private final JPanel iterationsPanel=new JPanel();
|
|
|
|
+ private final JPanel timePanel=new JPanel();
|
|
|
|
+ JSlider timeSlider = new JSlider() {//TODO:
|
|
/**
|
|
/**
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
@@ -81,7 +86,7 @@ public class TimePanel extends JPanel {
|
|
this.controller = cont;
|
|
this.controller = cont;
|
|
|
|
|
|
// One Iteration
|
|
// One Iteration
|
|
- timer = new Timer(0, new ActionListener() {
|
|
|
|
|
|
+ timer = new Timer(0, new ActionListener() {//TODO: Merge all these damned listeners.
|
|
@Override
|
|
@Override
|
|
public void actionPerformed(ActionEvent ae) {
|
|
public void actionPerformed(ActionEvent ae) {
|
|
timeSlider.setValue(timeSlider.getValue() + 1);
|
|
timeSlider.setValue(timeSlider.getValue() + 1);
|
|
@@ -101,8 +106,8 @@ public class TimePanel extends JPanel {
|
|
// Slider
|
|
// Slider
|
|
timeSlider.setPaintTicks(true);
|
|
timeSlider.setPaintTicks(true);
|
|
timeSlider.setPaintLabels(true);
|
|
timeSlider.setPaintLabels(true);
|
|
- timeSlider.setMinorTickSpacing(1);
|
|
|
|
- timeSlider.setMajorTickSpacing(5);
|
|
|
|
|
|
+ timeSlider.setMajorTickSpacing((int)Math.ceil(((double)model.getIterations())/20));
|
|
|
|
+ timeSlider.setMinorTickSpacing((int)Math.ceil(((double)model.getIterations())/100));
|
|
timeSlider.setToolTipText(Languages.getLanguage()[93]);
|
|
timeSlider.setToolTipText(Languages.getLanguage()[93]);
|
|
timeSlider.setMaximum(model.getIterations() - 1);
|
|
timeSlider.setMaximum(model.getIterations() - 1);
|
|
timeSlider.setValue(0);
|
|
timeSlider.setValue(0);
|
|
@@ -222,10 +227,19 @@ public class TimePanel extends JPanel {
|
|
btnAndSpeedPanel.setBorder(null);
|
|
btnAndSpeedPanel.setBorder(null);
|
|
btnAndSpeedPanel.add(timeBtnPanel, BorderLayout.NORTH);
|
|
btnAndSpeedPanel.add(timeBtnPanel, BorderLayout.NORTH);
|
|
btnAndSpeedPanel.add(speedPanel, BorderLayout.CENTER);
|
|
btnAndSpeedPanel.add(speedPanel, BorderLayout.CENTER);
|
|
-
|
|
|
|
|
|
+ iterationsPanel.setLayout(new GridLayout(3,1));
|
|
|
|
+ iterationsPanel.add(iterationsLabel, BorderLayout.NORTH);
|
|
|
|
+ iterationsField=new JTextField(6);//Considering hundreds of thousands in an extreme case
|
|
|
|
+ iterationsField.setText(""+model.getIterations());
|
|
|
|
+ iterationsField.addActionListener(this);//TODO
|
|
|
|
+ iterationsPanel.add(iterationsField);
|
|
|
|
+ iterationsPanel.add(new JLabel(), BorderLayout.SOUTH);
|
|
|
|
+ timePanel.setLayout(new BorderLayout());
|
|
|
|
+ timePanel.add(iterationsPanel, BorderLayout.WEST);
|
|
|
|
+ timePanel.add(timeSlider, BorderLayout.CENTER);
|
|
this.add(btnAndSpeedPanel, BorderLayout.WEST);
|
|
this.add(btnAndSpeedPanel, BorderLayout.WEST);
|
|
- this.add(timeSlider);
|
|
|
|
-
|
|
|
|
|
|
+ add(timePanel);
|
|
|
|
+
|
|
//Disable Keys
|
|
//Disable Keys
|
|
timeSlider.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, false), "UP_ARROW");
|
|
timeSlider.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, false), "UP_ARROW");
|
|
timeSlider.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, false), "DOWN_ARROW");
|
|
timeSlider.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, false), "DOWN_ARROW");
|
|
@@ -269,4 +283,23 @@ public class TimePanel extends JPanel {
|
|
public JSlider getTimeSlider() {
|
|
public JSlider getTimeSlider() {
|
|
return timeSlider;
|
|
return timeSlider;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void actionPerformed(ActionEvent arg0) {//I dislike anon classes.
|
|
|
|
+ try{
|
|
|
|
+ int iterations=Integer.parseInt(iterationsField.getText());
|
|
|
|
+ boolean resetField=true;
|
|
|
|
+ if(iterations<1)iterations=1;
|
|
|
|
+ else if(iterations>MAX_ITERATIONS)iterations=MAX_ITERATIONS;
|
|
|
|
+ else resetField=false;
|
|
|
|
+ if(resetField)iterationsField.setText(""+iterations);
|
|
|
|
+ model.setIterations(Integer.parseInt(iterationsField.getText()));
|
|
|
|
+ timeSlider.setMaximum(model.getIterations());
|
|
|
|
+ timeSlider.setLabelTable(null);//Otherwise the ticks won't update
|
|
|
|
+ timeSlider.setMajorTickSpacing((int)Math.ceil(((double)model.getIterations())/20));
|
|
|
|
+ timeSlider.setMinorTickSpacing((int)Math.ceil(((double)model.getIterations())/100));
|
|
|
|
+ }catch(NumberFormatException e){
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|