Zadanie jest takie, że mam stworzyć aplikacje Swing która rysuje powiększające się kwadraty, rozmiary, kolory są losowane, jSlider to czas aktywności kwadratu, czas życia każdego kwadratu jest wyświetlany w środku kwadratu. Zadanie jest takie, że muszę dodatkowo zatrzymać i rozpocząć "animację", na podstawie instrukcji z laboratorium nie mam pojęcia jak zrobić by wznowić animację.
Szukałem na ten temat, ale nie potrafię sobie z tym poradzić. Próbowałem metodą start() ale to chyba nie o to chodzi lub nie jest użyte we właściwym miejscu. Przycisk stop działa, ale gdy dla kwadratów wywołuje stop() ta funkcja jest przekreślona i też nie wiem dlaczego tak jest. Bardzo prosiłbym o jakieś wskazówki. Temat przewodni zadania to ogólnie zastosowanie wątków.
public class Łukasz extends javax.swing.JFrame implements MouseListener {
PanelGraficzny panel = new PanelGraficzny();
List<Kwadrat> kwadraty = new ArrayList<Kwadrat>();
int dt;
public Łukasz() {
initComponents();
setSize(700, 600);
panel.setBounds(50, 70, 500, 400);
panel.setBorder(BorderFactory.createLineBorder(Color.black));
addMouseListener(this);
dt = jSlider1.getValue();
add(panel);
}
@Override
public void mouseClicked(MouseEvent me) {
}
@Override
public void mousePressed(MouseEvent me) {
Kwadrat kw = new Kwadrat(dt, me.getX(), me.getY());
kwadraty.add(kw);
kw.start();
}
@Override
public void mouseReleased(MouseEvent me) {
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
class PanelGraficzny extends JPanel {
public void paintComponent(Graphics g) {
//dt = jSlider1.getValue();
// jTextField1.setText("" + dt);
g.setColor(Color.orange);
g.fillRect(0, 0, getWidth(), getHeight());
for (Kwadrat a : kwadraty) {
a.rysuj(g);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
repaint();
}
}
private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {
for(Kwadrat a : kwadraty){
a.stop();
}
}
private void jSlider1MouseDragged(java.awt.event.MouseEvent evt) {
dt = jSlider1.getValue();
}
private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {
}
public class Kwadrat extends Thread {
Łukasz a = new Łukasz();
int wspX, wspY;
Random rand = new Random();
int bok;
Color k;
String czas;
int dt1;
int bok1;
public Kwadrat(int dt, int wspX, int wspY) {
bok = rand.nextInt(61) + 30;
this.wspX = wspX;
this.wspY = wspY;
k = new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255));
dt1 = dt;
}
public void rysuj(Graphics g) {
czas = Integer.toString(dt1);
g.setColor(k);
g.fillRect(wspX - bok, wspY - bok, bok, bok);
g.setColor(Color.black);
g.drawString(czas, wspX - bok / 2, wspY - bok / 2);
}
public void run() {
do {
bok += 0.1 * bok;
dt1--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
} while (dt1 > 0);
}
}
Nie dodałem tego kodu, który jest generowany przez NetBeansa.
Pozdrawiam