Brak automatyzacji timera w JButtonie

0

Witam. Programuję od niedawna i już kierowałem swoją pomoc na to forum, lecz niestety Moderator bogdans nie dał mi szans spróbowania (dziękuję, że chwilę po odpisaniu przeniosłeś mój temat do Kosza i nie dałeś mi nawet szansy na zmianę nazwy tematu, ani szansy na normalną rozmowę :) ).

Tak więc nadal mój problem jest nierozwiązany, a polega on na tym, że po naciśnięciu JButton mój graficzny obiekt ort! się o jeden pixel i znów muszę wcisnąć JButton, a zależy mi na tym, żeby po jednym wciśnięciu JButton mój obiekt ort! się automatycznie co daną jednostkę czasu w prawo lub w lewo, tak jak zostało to narzucone dalej w programie.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JButton;
 
public class TestKulki extends JComponent
{
 
    public int kulka1X = 70;
    public int kulka1Y = 40;
 
    public int kulka2X = 70;
    public int kulka2Y = 120;
 
    public int kulka3X = 70;
    public int kulka3Y = 200;
 
    public int zwrot = 1;
 
    private static final long serialVersionUID = 8261970038837607784L;
 
    public static void main(String[] args)
    {
        JFrame aplikacja = new JFrame("Kuleczki");
        TestKulki droga = new TestKulki();
 
        aplikacja.add(droga);
        aplikacja.setSize(400,400);
        aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        aplikacja.setVisible(true);
 
    }
 
    public void paint(Graphics g)
    {
        Graphics2D kulka1 = (Graphics2D) g;
        Graphics2D kulka2 = (Graphics2D) g;
        Graphics2D kulka3 = (Graphics2D) g;
 
        kulka1.setColor(Color.BLUE);
        kulka1.fillOval(kulka1X, kulka1Y, 30, 30);
 
        kulka2.setColor(Color.YELLOW);
        kulka2.fillOval(kulka2X, kulka2Y, 30, 30);
 
        kulka3.setColor(Color.GREEN);
        kulka3.fillOval(kulka3X, kulka3Y, 30, 30);
 
        JButton ruch = new JButton ("Ruch");
        add(ruch);
        ruch.setBounds(70, 270, 100, 20);
        ruch.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                javax.swing.Timer timer=new javax.swing.Timer(100,new java.awt.event.ActionListener()
                {
                    public void actionPerformed(java.awt.event.ActionEvent evt)
                    {
 
                    }
                });
            if(kulka1X<100)
            {
                timer.start();
                kulka1X = kulka1X + zwrot;
                repaint();
            }
            else if(kulka2X<90)
            {
                timer.start();
                kulka2X = kulka2X + zwrot;
                repaint();
            }
            else if(kulka3X>30)
            {
                timer.start();
                kulka3X = kulka3X - zwrot;
                repaint();
            }
            timer.start();
 
            }
        });
    }
 
}
0

A jak byś te szansę wykorzystał? Jesteś niezalogowany i nie możesz edytować postów.
Zadałem Ci pytanie naprowadzające,

co robi Twój timer?

Teraz dam Ci odpowiedź naprowadzającą, nie robi nic.
Kilka błędów:

  • przycisk powinieneś dodać raz (u Ciebie w metodzie main),
  • po co Ci zmienne kulka1,...?, użyj zmiennej g.
    Czy jedno kliknięcie w przycisk ma wprawić w ruch wszystkie kulki, czy pierwsze kliknięcie wprawia w ruch pierwszą kulkę, drugie drugą a trzecie trzecią?
0

A mógł byś mi w takim razie podpowiedzieć z czego musiał bym skorzystać, żeby osiągnąć zamierzony efekt? :) Bo bez wiedzy ogólnej nic nie jestem w stanie zrobić. :/ :(

0

Z tym że, mam taką koncepcję, że zrobię dwa przyciski.
Gdy naciśnie się pierwszy przycisk, to automatycznie gdy jedna kulka dojdzie do celu, to automatycznie druga będzie się przemieszczała, a drugi przycisk ma za zadanie poruszać pierw jedną kulką do końca, potem kolejne naciśnięcie tego przycisku, wprawi w ruch drugą kulkę do końca i tak cały czas.

0

To zdobądź wiedzę ogólną. Timer wykonuje kod swojej metody actionPerformed, u Ciebie ta metoda jest pusta. Masz przykładowe rozwiązanie, kulki ruszą kolejno.


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.Timer;

public class TestKulki extends JComponent
{

    public int kulka1X = 70;
    public int kulka1Y = 40;

    public int kulka2X = 70;
    public int kulka2Y = 120;

    public int kulka3X = 70;
    public int kulka3Y = 200;

    public int zwrot = 1;

    private static final long serialVersionUID = 8261970038837607784L;

    public static void main(String[] args)
    {
        new TestKulki();
    }
    public TestKulki()
    {
        JFrame aplikacja = new JFrame("Kuleczki");

        aplikacja.add(this);
        aplikacja.setSize(400,400);
        aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        aplikacja.setVisible(true);
        JButton ruch = new JButton ("Po kolei");
        this.add(ruch);
        ruch.setBounds(70, 270, 100, 20);
        Timer timer = new Timer(20,new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                kulka1X+=zwrot;
                if(kulka1X > 330)
                {
                    kulka2X+=zwrot;
                }
                if(kulka2X > 330)
                {
                    kulka3X+=zwrot;
                }                
                TestKulki.this.repaint();
            }
        });
        ruch.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                timer.start();
            }
        });
    }

    public void paintComponent(Graphics g)
    {
        g.setColor(Color.BLUE);
        g.fillOval(kulka1X, kulka1Y, 30, 30);

        g.setColor(Color.YELLOW);
        g.fillOval(kulka2X, kulka2Y, 30, 30);

        g.setColor(Color.GREEN);
        g.fillOval(kulka3X, kulka3Y, 30, 30);
    }

}
0

Dzięki o coś takiego mi chodziło. A był byś w stanie mi podesłać jeszcze jakieś informacje co do źródeł z których mógł bym czerpać taką ogólną wiedzę na temat różnych klas itp.? Książki lub kursy? Bo często mi tego brakuje. :/ :(

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