2015-05-02 5 views
0

Можно ли это сделать? Я попытался сделать это, но он дает ошибку компиляции:Использование анонимного объекта-слушателя внутри класса таймера

Timer t = new Timer(1000,new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 

    } 
}); 

Вот весь код для справки


Полный код:

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Timer; 

import javax.swing.JComponent; 
import javax.swing.JFrame; 

public class Scratch { 


    public static void main(String[] args) { 
     JFrame frame = new JFrame("Moving Rectangle"); 
     frame.setSize(1000,700); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new JComponent() { 
      public void paintComponent(Graphics g) { 
       Graphics2D g2 = (Graphics2D) g; 

      } 

     }); 
     Timer t = new Timer(1000,new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 

      } 
     }); 

    } 
} 

мне нужно что-то типа, как мой вопрос в основном код.

+0

что ошибка компиляции? –

+0

Да, это можно сделать довольно просто, и вы почти получили его! – DripDrop

+0

В нем указано, что конструктор не определен. :( –

ответ

1

but it gives a compilation error:

Когда вы задаете вопрос, сообщение об ошибке, поэтому нам не нужно гадать.

Когда я добавил ваш код в основной метод пустой() Я получил следующее, потому что у меня было много стандартных операторов импорта в тестовом классе:

Main.java:21: error: reference to Timer is ambiguous, both class java.util.Timer in java.util and class javax.swing.Timer in javax.swing match 
Timer t = new Timer(1000, new ActionListener() 

Решение может быть использовать:

javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() 

, чтобы избежать путаницы.

Edit:

ли вы посмотрите на мое решение выше? Обратите внимание, как я использую javax.swing.Timer?

import java.util.Timer; 

Не используйте java.util.Timer. С Swing вам нужно использовать таймер Swing, поэтому код выполняется на EDT.

Вместо этого используйте:

import javax.swing.Timer; 
+0

Прошу прощения, фактическая ошибка заключается в том, что он говорит, что конструктор не определен. :( –

+1

@KaneWilliamson, см. редактирование. Вот почему нам нужен «SSCCE». Чтобы понять контекст вашего кода и сообщения компилятора. – camickr

Смежные вопросы