2015-02-24 63 views
0

我正在研究一個從用戶那裏得到像x^2 + t這樣的表達式的繪圖器,然後會詢問用戶x和t的範圍。 t在這裏是計時器變量。 所以在x^2 + t中,用戶例如將選擇-10到10代表x和1到5代表t。現在通過點擊GUI程序中的繪圖按鈕,代碼將開始繪製從最小t(這裏爲1)開始繪製表達式,並且在每秒(或任何時間段)之後將t值增加1並且用新t繪製表達式(2 ,3直到達到最大範圍)。 如何使事件處理程序來做到這一點?我找到了繪製多個圖形的方法,但是我無法將延遲從最小值延伸到最大值。 我知道我應該使用定時器,但我不知道如何在代碼圖形繪圖儀在java中的計時器

Link,這部分用於整個代碼

這是應該改變的繪圖類代碼的一部分:

// Grapher 
    drawButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 

      try { 

       String testSpring = null; 
       String tVarString = null; 

       for (int i = 0; i < 5; i++) { 

        testSpring = inputExpression; 
        tVarString = String.valueOf(i); 
        testSpring = testSpring.replaceAll("t", tVarString); 

        Equation equation = new Equation(testSpring); 

        graph.addEquation(equation); 

       } 
      } 

      catch (EquationSyntaxException e) { 

       e.printStackTrace(); 
      } 

     } 
    }); 

這是節目的圖象:

enter image description here

我p只是通過點擊繪圖按鈕 來運行程序,但是如果這個計時器可能會影響JSlider ,所以t的最小值和最大值將是Jslider的最小值和最大值,並且通過點擊繪圖就可以開始繪圖了時間滑塊旋鈕將在價值點在t

+1

看看[Swing Time r](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) – MadProgrammer 2015-02-24 20:51:19

+0

@MadProgrammer我已經做到了。我試過不同的方法來實現計時器,但它已經失敗 你能更具體地說明如何改變這個嗎? – Vicarious 2015-02-24 20:52:59

+1

請記住,一個'Timer'只是一個僞循環 – MadProgrammer 2015-02-24 21:12:33

回答

1

看看How to use Swing Timers

這將允許您設置每隔一定的時間,這是從美國東部時間範圍內執行的回調,使得它的安全從內部更新UI

public void actionPerformed(ActionEvent arg0) { 

     Timer timer = new Timer(1000, new ActionListener() { 
      private int iteration; 
      @Override 
      public void adtionPerformed(ActionEvent evt) { 

       try { 

        String testSpring = null; 
        String tVarString = null; 

        testSpring = inputExpression; 
        tVarString = String.valueOf(iteration); 
        testSpring = testSpring.replaceAll("t", tVarString); 

        Equation equation = new Equation(testSpring); 

        graph.addEquation(equation); 

       } catch (EquationSyntaxException e) { 
        e.printStackTrace(); 
       } finally { 
        iteration++ 
        if (iteration > 4) { 
         ((Timer)evt.getSource()).stop(); 
        } 
       } 
      } 
     }); 
     timer.start(); 

    } 
});