Opoznienie w programie

Odpowiedz Nowy wątek
2011-05-01 14:20

Rejestracja: 11 lat temu

Ostatnio: 2 dni temu

Lokalizacja: Kraków

0

Witajcie, mam pewien problem z programem, ktory co okreslony czas powinien rysowac cos na moim panelu, mianowicie kod:

import java.awt.*;
import javax.swing.*;

public class test3
{
    public static void main(String[] args) 
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                MojaRamka ramka = new MojaRamka();
            }
        });
    }        
}

class MojaRamka extends JFrame 
{ 
    public MojaRamka()
    {           
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setSize(500, 500);

        MojPanel a = new MojPanel();
        a.setPreferredSize(new Dimension(500,500));
        add(a);
    }

}

class MojPanel extends JPanel
{
    public void paintComponent(Graphics g)
    {
        try
        {
            for(int i = 0; i< 10; i++)
            {
                g.drawString("" + i, 30 * i, 30 * i);
                Thread.sleep(1000);
            }
        }
        catch(InterruptedException e)
        {

        }
    }   
}  

nie działa tak jak oczekuję, na początku jest opóźnienie, potem jednak dopiero wszystko się ładuje, jednak w jednym momencie, a nie tak jak chcę, z sekundowym opóźnieniem, dlaczego? jak zrobić, żeby każda kolejna cyfra wyświetlana była co ~1000 ms?


Pozostało 580 znaków

2011-05-01 17:21

Rejestracja: 9 lat temu

Ostatnio: 6 lat temu

1

W metodzie paintComponent nie powinieneś usypiać wątku z wielu powodów. Wszystko ładuje się po 10s dlatego, że metoda musi najpierw się zakończyć, żeby można było ten panel odrysować. W paintComponent zostaw tylko linijkę g.drawString("" + i, 30 * i, 30 * i);, z i zrób pole klasy, a pętlę wstaw w osobny wątek, który co 1000ms będzie inkrementował i.

Pozostało 580 znaków

2011-05-01 17:34

Rejestracja: 9 lat temu

Ostatnio: 3 lata temu

1

Może to cie naprowadzi...

public class Main {

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {
                MojaRamka ramka = new MojaRamka();
            }
        });
    }
}

class MojaRamka extends JFrame {

    public MojaRamka() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setSize(500, 500);

        MojPanel a = new MojPanel();
        //    a.run();
        a.setPreferredSize(new Dimension(500, 500));
        add(a);

    }
}

class MojPanel extends JPanel implements Runnable {

    int step = 1;

    public void paintComponent(Graphics g) {

        g.drawString("" + step, 10 * step, 10 * step);
        this.run();

    }

    public void run() {
        //for (int i = 0; i < 5; i++) {
        if (step < 20) {
            step++;
            try {
                Thread.sleep(50);
            } catch (InterruptedException ie) {
            }
            repaint();
        }
    }
}

Pozostało 580 znaków

bo
2011-05-01 18:40
bo
0

Prościej można to zrobić przy użyciu Timera.

Pozostało 580 znaków

2011-05-02 01:05

Rejestracja: 11 lat temu

Ostatnio: 2 dni temu

Lokalizacja: Kraków

0

dziękuje wszystkim, z wątkiem sobie poradziłem, jednak mam nowy problem, mianowicie panel zaczął mi się nieco przesuwać, gdy dodałem przycisk, oto mój kod:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

public class test3 
{
    public static void main(String[] args) 
    {
        EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {
                MojaRamka ramka = new MojaRamka();
            }
        });
    }
}

class MojaRamka extends JFrame 
{
    public MojaRamka() 
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setSize(500, 500);       

        glowny.setPreferredSize(new Dimension(500, 500));
        add(glowny);

        glowny.add(buton);      

        a.setPreferredSize(new Dimension(500, 500));
        glowny.add(a);

        akcjaStart.setPreferredSize(new Dimension(500, 500));

        buton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent evet)
            {
                glowny.remove(a);
                glowny.add(akcjaStart);
                glowny.revalidate();
                glowny.repaint();
            }
        });     
    }
    private JPanel glowny = new JPanel();
    private JButton buton = new JButton("GO!");
    private MojPanel a = new MojPanel();
    private akcjaPrzyciskStart akcjaStart = new akcjaPrzyciskStart();
}

class akcjaPrzyciskStart extends JPanel implements Runnable
{
    int step = 1;
    public void paintComponent(Graphics g) 
    {
        Graphics2D g2 = (Graphics2D) g;      
        Rectangle2D kwadrat = new Rectangle2D.Double(10, 10, 10 * step, 10 * step);
        g2.draw(kwadrat);   
        this.run(); 
    } 
    public void run() 
    {
        if (step < 10) 
        {
            step++;
            try 
            {
                Thread.sleep(100);
            } 
            catch (InterruptedException ie) 
            {

            }
            repaint();
        }
    }
}

class MojPanel extends JPanel
{ 
    public void paintComponent(Graphics g) 
    {
        Graphics2D g2 = (Graphics2D) g;      
        Rectangle2D kwadrat = new Rectangle2D.Double(10, 10, 10, 10);
        g2.draw(kwadrat);
    } 
}      

kompletnie nie wiem dlaczego...
button się dubluje...
proszę o pomoc


edytowany 1x, ostatnio: JrQ-, 2011-05-02 01:10

Pozostało 580 znaków

2011-05-02 11:27

Rejestracja: 9 lat temu

Ostatnio: 3 lata temu

0

Ja to się nie dziwię dlaczego ci się wszystko rozjeżdża...

Zapomniałeś o LayoutManager.

Musisz jakoś rozstawić te kmponenty...Samo się nie zrobi...

Pozdr.

Pozostało 580 znaków

2011-05-03 14:49

Rejestracja: 11 lat temu

Ostatnio: 2 dni temu

Lokalizacja: Kraków

0

niestety, ustawienie layouta nie pomaga
mnie ciekawi jedno, dlaczego, jak nie tworzę nowego wątku to jest ok, a jak ten nowy wątek jest tworzony, to się wszystko sypie?


Pozostało 580 znaków

Odpowiedz

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