zaliczenie java applet

0

Cześć, mam wielki problem tzn. mam napisać applet w javie. Wybrałem temat o animacji, ogarnąłem troszkę timera ale potrzebuję interakcji -.- i zauważyłem że to przewyższa moje możliwości. Jestem porządkujący i mało programuję, kumpel polecił mi to forum. Jak na razie mam 2 klasy:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Timer;
public class Rysowanie extends Applet
{
	static Applet applet;
	Obliczenia obliczenia = new Obliczenia();
	Timer timer = new Timer();
	
	public void init()
	{
		applet = this;
		applet.setSize(600, 400);
		applet.setBackground(Color.gray);
		timer.scheduleAtFixedRate(obliczenia, 0, 10); // czas po jakim metoda ma ruszyć, czas odświeżania
	}
	
	public void paint(Graphics g)
	{
		g.setColor(Color.red);
		g.fillOval(obliczenia.pozycja1, obliczenia.pozycja2, 100, 100);
	}
}

---------------------------------------------------------------
import java.util.TimerTask;

public class Obliczenia extends TimerTask
{
	int pozycja1 = 0;
	int pozycja2 = 0;
	int kierunek = 1;
	int licznik = 0;
	
	public void run()
	{
		switch(kierunek)
		{
		case 1:
			licznik++;
			pozycja1++;
			if(licznik == 300)
			{
				licznik = 0;
				kierunek = 2;
			}
			break;
		case 2:
			licznik++;
			pozycja2++;
			if(licznik == 300)
			{
				licznik = 0;
				kierunek = 3;
			}
			break;
		case 3:
			licznik++;
			pozycja1--;
			if(licznik == 300)
			{
				licznik = 0;
				kierunek = 4;
			}
			break;
		case 4:
			licznik++;
			pozycja2--;
			if(licznik == 300)
			{
				licznik = 0;
				kierunek = 1;
			}
			break;
		}
		Rysowanie.applet.repaint();
	}
			
}

pewnie to straszne głupoty ale rusza się i jestem z tego dumny hah,

Chciałbym zrobić 4 przyciski które zmieniałyby kolor kuli, to niby proste ale ciągle się gubie, pomożecie?? :c

0

Jeśli nie ogarniasz w ogóle przycisków to poczytaj sobie :) http://javastart.pl/static/grafika_awt_swing/zdarzenia-przyciski/

0

Czytałem to kilka razy, ale mam braki przy klasach i teraz nie mam czasu nadrabiać bo matura itd, chodzi o to że ciężko jest dodać przycisk w aplecie(przynajmniej mi) i cały czas obraz się odświeża

0
package zaliczenie;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Timer;
public class Rysowanie extends Applet
{
	Image buffer;
	static Applet applet;
	Graphics bg;
    Obliczenia obliczenia = new Obliczenia();
    Timer timer = new Timer();
    public void init()
    {
        applet = this;
        buffer = createImage(600,400);
		bg = buffer.getGraphics();
        applet.setSize(600, 400);
        applet.setBackground(Color.gray);
        timer.scheduleAtFixedRate(obliczenia, 0, 10); // czas po jakim metoda ma ruszyć, czas odświeżania
    }
    
    public void paint(Graphics g)
    {
        g.setColor(Color.red);
        g.fillOval(obliczenia.pozycja1, obliczenia.pozycja2, 100, 100);
    }
    
	public void update(Graphics g)
	{
		bg.clearRect(0, 0, 600, 400);
		paint(bg);
		g.drawImage(buffer, 0, 0, applet);
	}
    
}

Migotanie zniknie :)

0

bez pacage oczywiście bo zrobiłem to u siebie :)

0

dzięki, aczkolwiek nie zupełnie o to chodziło :D

0

Masz przykład z jednym kolorem, rozmiar apletu powinieneś ustawiać w pliku HTML, a nie w kodzie apletu.

<applet code="Rysowanie" width="600" height="400"></applet>
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.util.Timer;

public class Rysowanie extends Applet
{
    Obliczenia obliczenia = new Obliczenia();
    Timer timer = new Timer();
    static Applet applet;
    Color kolor = Color.RED;    
    public void init()
    {
        applet = this;
        //applet.setSize(600, 400);
        setBackground(Color.GRAY);
        timer.scheduleAtFixedRate(obliczenia, 0, 10); // czas po jakim metoda ma ruszyć, czas odświeżania
        Button b = new Button("Niebieski");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                kolor = Color.BLUE;
                applet.repaint();
            }
        });
        add(b);
    }
 
    public void paint(Graphics g)
    {
        super.paint(g);
        g.setColor(kolor);
        g.fillOval(obliczenia.pozycja1, obliczenia.pozycja2, 100, 100);
    }
}
0

Dziękuję, to bardzo pomogło. Mam jeszcze pytanie, dlaczego nigdzie w kodzie nie ma współrzędnych położenia przycisku i jak to ustawić? :/

0

tu sie klaniaja layouty http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html Flow jest domyslny

0

nie mam pojęcia o co w tym chodzi

0

Zrozumiesz z czasem. Na razie przyjmij, że w Javie nie rozmieszczasz komponentów ręcznie - podajesz tylko reguły rozmieszczenia (layouty). Nie chciałem zbyt komplikować kodu w Twoim aplecie. Gdybym pisał dla siebie, to obszar apletu podzieliłbym na dwa panele. W jednym z nich wędrowała by kulka, w drugim byłyby przyciski.
Przeanalizuj tę wersję Twojego apletu (zmieniłem klasę Applet na JApplet, w "cudowny" sposób zniknęło migotanie).

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.util.Timer;

public class Rysowanie extends JApplet
{
    Obliczenia obliczenia = new Obliczenia(this);
    Timer timer = new Timer();
    Color kolor = Color.RED;
    DrawPanel drawPanel = new DrawPanel();
    public void init()
    {
        setLayout(new BorderLayout());
        add(drawPanel,BorderLayout.CENTER);
        JPanel controlPanel = new JPanel();
        controlPanel.setPreferredSize(new Dimension(400,40));
        
        JButton b = new JButton("Niebieski");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                kolor = Color.BLUE;
                repaint();
            }
        });
        controlPanel.add(b);
        b = new JButton("Zielony");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                kolor = Color.GREEN;
                repaint();
            }
        });
        controlPanel.add(b);
        b = new JButton("Czerwony");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                kolor = Color.RED;
                repaint();
            }
        });
        controlPanel.add(b);
        b = new JButton("Żółty");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                kolor = Color.YELLOW;
                repaint();
            }
        });
        controlPanel.add(b);         
        
        add(controlPanel,BorderLayout.SOUTH);
        timer.scheduleAtFixedRate(obliczenia, 0, 10); // czas po jakim metoda ma ruszyć, czas odświeżania
    }
    class DrawPanel extends JPanel
    {
        public DrawPanel()
        {
            setPreferredSize(new Dimension(400,400));
            setBackground(Color.GRAY);    
        }            
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.setColor(kolor);
            g.fillOval(obliczenia.pozycja1, obliczenia.pozycja2, 100, 100);
        }
    }
}

Ta wersja klasy Rysowanie wymaga dwóch drobnych zmian w klasie Obliczenia.

...
    int licznik = 0;
    Rysowanie aplet;
    public Obliczenia(Rysowanie aplet)
    {
        this.aplet = aplet;
    }
...
    aplet.drawPanel.repaint();
0

dzięki, o to mi chodziło

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