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();
}
}