2015-03-05 2 views
-1

Я пытаюсь перемещать круги, используя func1() и func2(), также используя таймеры. Но они не перемещаются вообще. Итак, как получить значения «x» и «x1» от двух функций для paintComponent. Вот код:Перемещение двух окружностей

import java.awt.Graphics; 
import java.awt.TextField; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Timer; 
import java.util.TimerTask; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class TC extends JPanel 
{ 
    static Timer t1; 
    static Timer t2; 
    static Timer t3; 
    static TimerTask tt1; 
    static TimerTask tt2; 
    static int x = 0 ,x1 = 500; 
    static int y = 100,i = 0,j = 0; 
    static Graphics g1; 
    static int var = 0; 

public static void main(String[] args) throws Exception 
{ 
    TC T = new TC(); 
    JFrame f = new JFrame("TC"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JFrame ff = new JFrame("2nd Frame"); 
    ff.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    TextField tf1 ,tf2; 
    f.getContentPane().setLayout(null); 
    tf1 = new TextField(); 
    tf2 = new TextField(); 
    tf1.setBounds(50,50, 200, 20); 
    tf2.setBounds(50,100, 200, 20); 
    f.add(tf1); 
    f.add(tf2); 
    TC.func1(f,tf1); 
    TC.func2(f,tf2); 
    ff.add(T); 
    ff.setSize(1000, 700); 
    ff.setVisible(true); 
    f.setSize(1000,700); 
    f.setVisible(true); 
} 

static void func1(JFrame f,TextField tf1) 
{ 
    //int delay = 100; 
    TC T = new TC(); 
    t1 = new Timer();  
    tt1 = new TimerTask() 
    { 
    @Override 
    public void run() 
     {    
        x += 1; 
        y = 100; 
        System.out.println(x); 
        System.out.println(y); 
        tf1.setText(Integer.toString(x)); 
      if(x1 == x) 
      { 
       t1.cancel(); 
       tt1.cancel(); 
      }    
     }; 

    }; 
    t1.scheduleAtFixedRate(tt1,0,50);  
} 

static void func2(JFrame f,TextField tf2) 
{ 
    t2 = new Timer();  
    tt2 = new TimerTask() 
    { 
    @Override 
    public void run() 
     {    
      x1 -= 1; 
      y = 100; 
      System.out.println(x1); 
      System.out.println(y); 
      tf2.setText(Integer.toString(x1); 
      if(x1 == x) 
      { 
       t2.cancel(); 
       tt2.cancel(); 
      } 
     } 
    }; 
    t2.scheduleAtFixedRate(tt2,0,50); 
} 

    @Override 
    public void paint(Graphics g) 
    { 
     super.paintComponent(g); 
      g1 = g; 
      g.fillOval(x, y, 10, 10); 
      g.fillOval(x1, y, 10, 10); 
    }    
} 
+0

Мое намерение было одинаковым для обоих вопросов, но я не получаю точных результатов от обоих кодов. Их подходы совершенно разные. –

+0

оба вопроса заданы мной только. –

ответ

0

Возможно, вы должны перекрасить круг каждый раз, когда вы их перемещаете.

+0

repaint() не работает. –