动画应该根据另一个java文件中的变量进行更改

时间:2014-01-28 14:16:51

标签: java animation jpanel

所以基本上我有我的主要代码(TuringSimLS.java)和我的动画代码(Animation.java) Animation.java创建了许多框(取决于我的TuringSimLS.java中数组的长度。此数组的长度不会改变)。现在我的TuringSimLS.java中有一个变量,它有一个变量指针(这个变化)。此指针决定动画中的哪个框位于中间。例如,如果有7个盒子,并且指针是6,那么中间的盒子将有一个盒子在它右边,五个盒子在它左边(使它成为第6个盒子)。当指针改变时,所有框都移动,直到所需的框位于中间。问题是我的方法(更改指针的值)完成运行然后我的动画开始。因此,没有动画最终发生(因为指针的值返回到它最初在开始时的值)。一旦变量指针的值发生变化,我就需要动画发生。

我的主要代码的一部分(TuringSimLS.java)

public static int[] POINTER = new int[1]; // My global variable. How i tell my Animation.java
                                          // What the current value of pointer is

 static String[] processTape(String[][] Quints, String[] Tape, int TapeInitial) {
       int pointer = TapeInitial;
       POINTER[0] = pointer;
       ...
       ...
       Animation.main(Quints, Tape, TapeInitial); // <- animation started here
       while (!currentDir.equals("H")) { // <- IMPORTANT WHILE LOOP as mentioned below
        for (String[] Quint : Quints) {
            if (Quint[0].equals(currentState) && Quint[1].equals(Tape[pointer])) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(TuringSimLS.class.getName()).log(Level.SEVERE, null, ex);
                }
                Tape[pointer] = Quint[3];
                ...
                ...
                if (currentDir.equals("R")) {pointer += 1;}   // pointer changes here
                if (currentDir.equals("L")) {pointer -= 1;}
                symbolFound = true;
                startFound = true;
                POINTER[0] = pointer; 
                //Here is where i want the animation to start as in 
                //moving of the already drawn boxes
                //System.out.println(POINTER[0]);
                break;
            }
        }

         }
   return Tape;
}

这是我的Animition.java:

package turingsimls;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;    // Imports ActionEvent, ActionListener
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;


public class Animation extends JPanel implements ActionListener
{  
   Timer tm = new Timer(5, this);
   int x = 0;
   int xtri = 300;
   int ytri = 30;
   public static int[] C = new int[1];
   public static int[] Number = new int[1];
   public static int[] POINTER2 = new int[1];

   public void paintComponent(Graphics g) {
       super.paintComponent(g);   //9
       g.setColor(Color.WHITE);
       for (int i = 0; i < Number[0]; i++)
              g.fillRect((280 + (40 + 20)*i) + C[0], 50, 40, 30);
       int xpoly[] = {xtri , xtri + 10, xtri - 10 };
       int ypoly[] = {ytri, ytri - 10, ytri - 10};
       g.drawPolygon(xpoly, ypoly, xpoly.length);

       tm.start();
   }

   public void actionPerformed (ActionEvent e) {
          //Here C changes according to the pointer
          //Which in turn changes the XPos of the rectangles
         if (!(C[0] == -60 * TuringSimLS.POINTER[0])){
           if ((C[0] < -60 * TuringSimLS.POINTER[0]))  
               C[0] += 10;

           if ((C[0] > -60 * TuringSimLS.POINTER[0]))
               C[0] -= 10;
       }
       System.out.println(C[0]);
       System.out.println(TuringSimLS.POINTER[0]);
       repaint();

   }

   public static void main(String[][] Quints, String[] Tape, int TapeInitial) {
       Animation t = new Animation();  //2
       JFrame jf = new JFrame();
       jf.setTitle("Animation");
       jf.setSize(600, 400);
       jf.setVisible(true);
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       jf.add(t);
       Number[0] = Tape.length - 1;
       C[0] = -60 * TapeInitial;
   }
}

processTape()启动动画并正确生成第一个矩形。问题是整个“重要的while循环”在actionPerformed()第二次运行之前运行。所以动画不会处理指针的变化。

0 个答案:

没有答案