Java swing rysowanie

0

Cześć.

Planuję napisać aplikacje, coś w rodzaju animacji reagującej na zdarzenia Określając dogłębniej problem chodzi mi o to, ze jak kliknę powiedzmy na przycisk ( który zresztą będzie częścią 'rysunku') to jakiś ludzik zacznie chodzić, a jak kliknie ponownie to przestanie. DO tej pory nie miałem styczności z rysowaniem i szczerze mówiąc nic poza głównym oknem (Jframe) nie zrobiłem i nie bardzo wiem jak się za to zabrać.

Czy moglibyście mi udzielić jakichś wskazówek?

1

przede wszystkim klasa Canvas i metoda paintComponent().

Metody tej możesz np użyć rozszerzając JPanel.

0

Czyli zastąpić JFrame JPanelem? A paintComponent przyjmuje jako parametr obiekt klasy Graphics, który jest abstrakcyjny, czyli będę musiał go zaimplementować, tak? Trochę trudne zadanie dla amatora zważywszy, ze tak większość metod jest abstrakcyjna.

0

Najlepiej do rysowania użyj Graphics2D. Daje większe możliwości.
Przykład rysowania:

class C extends JPanel{
    @Override
    public void paintComponent(Graphics g){
        Graphics2D g2d=(Graphics2D)g; //"zrzucasz sobie Graphics do Graphics2D
        g2d.setColor(Color.GREEN); //ustawiasz kolor
        g2d.fillRect(10, 10, getWidth()-10, getHeight()-10); //wypełniasz prostokąt
    }
}

poczytaj:
http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics2D.html - dokumentacja
http://java.sun.com/products/java-media/2D/samples/suite/index.html - przykłady

0

Jeszcze takie szybkie pytanie. Jak to możliwe, ze utworzyłeś obiekt Graphics2d, skoro ów klasa jet abstrakcyjna?

0
package xxx;

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

class C extends JPanel implements MouseListener {

    public int x, y;

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g; //"zrzucasz sobie Graphics do Graphics2Di

        g2d.setColor(Color.BLUE);
        g2d.drawString("Abcdef", x, y);


    }

    public void mousedown(Event e, int x, int y) {

        this.x = x;
        this.y = y;
        this.repaint();

    }

    public void mouseClicked(MouseEvent e) {

        this.x = e.getX();
        this.y = e.getY();
        this.repaint();
    }

    public void mouseEntered(MouseEvent e) {
        mouseClicked(e);
    }

    public void mouseExited(MouseEvent e) {
        mouseClicked(e);
    }

    public void mousePressed(MouseEvent e) {
        mouseClicked(e);
    }

    public void mouseReleased(MouseEvent e) {
        mouseClicked(e);
    }
}

CZy ktos wie, czemu ten kod nie dziala poprawnie?

0

Działa poprawnie, tylko pewnie nigdzie nie dodajesz słuchacza myszy (czy jak to się tam nazywa). Klasa implementuje metody do "nasłuchiwania", ale nic poza tym.
W konstruktorze (musisz go najpierw zrobić) dopisz:

addMouseListener(this);
0

Dodalem. Kod maina

JFrame frame = new JFrame("Symulator");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                


                C cc = new C();

                cc.setSize(600, 500);

               
                frame.add(cc);
                 cc.addMouseListener(cc);

Wczesniej ten kod działał, a teraz nie chce :/

0

Wie ktoś moze jak sobie z tym poradzic? Problem polega na tym, ze metoda repaint() nie wyołuje zadnej metody do odrysowania.

0

Działa repaint(), napis pojawia się poza panelem.

    public void mouseClicked(MouseEvent e)
    {
        this.x = e.getX();
        this.y = e.getY(); // tak ma być
        repaint();
    }
0

Ok poradziłem sobie z tym problemem, ale mam następne pytanie.

Rysowanie ręcznie za pomocą kodu jest trochę mozolne i i co najważniejsze trudne(przynajmniej dla mnie). Dlatego czy istnieje jakiś sposób, aby stworzyć jakiś ładny rysunek w programie zrobić z niego animacje? Przykładem takiego rysunku może byc samochodu, (który niewątpliwie trudno narysować pisząc kod) i w programie robić na nim pewne animacje np. kręcić koła na życzenie, przyciemniać szyby itp, a jednocześnie żeby wszystko estetycznie wyglądało. Są do tego jakieś pomoce?

0

Może po prostu JavaFX? W tym celu zostało to stworzone.

0

Zostane przy Javie, aczkolwiek przyjrze sie javiefx w niedalekiej przyszłości. To może istneije jakas zewnetrzna biblioteka, ktora znacznie ulatwia animacje?

0

W książce "Efekty graficzne i animowane dla aplikacji Desktop Java", autorzy: Chet Haase, Romain Guy (wydawnictwo Helion) można przeczytać o Timing Framework, Animated Transitions, bibliotekach które współpracują ze sobą i wspomagają animacje. Czy to jest znacznie ułatwienie? Hmm ... spróbuj i podziel się z nami swoimi wrażeniami.

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