Problem z kompilacją

0

Próba kompilacji poniższego kodu prowadzi do błędów: " cannot find symbol symbol: constructor(int, MoveObject.Ball) location: class java.util.Timer" , " cannot find symbol symbol: method setInitialDelay(int) location: class java.util.Timer" , " cannot find symbol symbol: method start() location: class java.util.Timer". W NetBeans wybrałem typ projektu DesktopApplication, a swoją klasę umieściłem w nowy pakiecie MoveObject. Proszę o wyjaśnienie skąd te błędy podczas kompilacji ?

 

package MoveObject;

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

public class Ball extends JPanel implements ActionListener {

    private double x;
    private double y;
    Timer timer;

    public Ball()
    {
       timer = new Timer(100, this);
       timer.setInitialDelay(100);
       timer.start();
       x = 30;
       y = 30;
    }

    @Override
    public void paint(Graphics g){ //jakis kod  }
   
    public void actionPerformed(ActionEvent e){    repaint();  }
    
}

0

Importujesz java.util.Timer, a powinieneś javax.swing.Timer. Btw, ustawianie initialDelay jest chyba niepotrzebne, bo domyślnie jest takie jak delay.

0

Ok, zaimportowałem javax.swing.Timer i wszystko jest ok. Mam jednak kilka pytań odnośnie tworzenia aplikacji w Netbeans. Na początku wybrałem DesktopApplication, potem dodałem do niego nowy pakiet MoveObject, w którym umieściłem swoją klasę Ball. Nie jestem pewien jak powiązać swoje klasy z całą resztą desktopowej aplikacji Netbeansa. Domyślnie Netbeans generuje takie pliki jak DesktopApplication1.java, DesktopApplication1AboutBox.java, Desktopapplication1View.java. W DesktopApplication1View.java mamy zakłady source i design. W design można projektować wygląd aplikacji. Chcę stworzyć prosty program, który rysuje przemieszczający się obiekt Graphics2D. W DesktopApplication1View.java zrobiłem w ten sposób, że przeciągnąłem moją klasę na główny panel w trybie design, po czym pojawiła się ona w zakładce Component Insepctor w mainPanelu jako ball1 [Ball] ( ikona taka jak FrameView ). Program działa i rysuje przemieszczający się obiekt, jednak nie wiem czy takie podejście jest poprawne ? Czy dobrze napisałem swoją klasę ? Poza tym, nie muszę w pliku DesktopApplication1.java w funkcji main umieszczać wywołania, np. Ball myBall = new Ball(). Sądziłem, że takie wyrażenie musi się tam znaleźć żeby program działał jednak nie jest to konieczne? Na jakiej zasadzie to działa ? Ostatnia kwestia o którą chciałem zapytać dotyczy pozyskiwania wymiarów panelu. Załóżmy że na mainPanel, kładę jakiś jPanel1 i na nim klasę tzn.ball1[Ball]. W jaki sposób ( jak napisać funkcję), która będzie pobierać wymiary tego panelu i przekazywać do mojej klasy? Potrzebne jest mi to, ponieważ chciałem aby piłka odbijała się w obrębie tego panelu i muszę wiedzieć kiedy w funkcji paint zmienić jej przemieszczenie. Poniżej zamieszczam kod klasy Ball:

 

package MoveObject;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.JPanel;

public class Ball extends JPanel implements ActionListener {

    private double size;
    private int x;
    private int y;
    Timer timer;
    
    public Ball()
    {

        x = 50;
        y = 50;
        timer = new Timer(100, this);
        timer.start();
       
    }

    
    @Override
    public void paint(Graphics g)
    {
        
        Graphics2D g1 = (Graphics2D) g;
        g1.setColor(Color.red);
        g1.fillOval(x, y, 10, 10);
        x += 10;
        y += 10;


    }

   
    public void actionPerformed(ActionEvent e)
    {
        repaint();
    }
    
}


0

NetBeans generuje dużo kodu automatycznie, który jest domyślnie zwinięty. Przejdź do widoku kodu i rozwiń sobie ten autowygenerowany kod.

0

To wiem, ale proszę o odpowiedzi na moje pytania...

1 użytkowników online, w tym zalogowanych: 0, gości: 1