Java swing rysowanie

Java swing rysowanie
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
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?

edytowany 1x, ostatnio: cCc
kasiaKasia
Ja też się uczę :) :) :) Tu jest dużo przykładów (wybierasz sobie kategorie po lewej): http://download.oracle.com/javase/tutorial/uiswing/components/index.html
remigio
  • Rejestracja:prawie 15 lat
  • Ostatnio:prawie 9 lat
  • Postów:357
1

przede wszystkim klasa Canvas i metoda paintComponent().

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

CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
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.

R9
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 11 lat
0

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

Kopiuj
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

CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
0

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

LN
Tu nikt nie tworzy obiektu klasy Graphics2D. Tu rzutujesz obiekt Graphics na typ Graphics2D. Innymi slowy: zaczynasz traktowac podany obiekt Graphics tak, jakby w rzeczywistosci byl typu Graphics2D.
Kerai
nie "tak jakby", bo to cały czas był Graphics2D, o czym bez rzutowania nasz program by nie wiedział...
LN
Omg ;p Mógł to być też równie dobrze obiekt klasy pochodnej od Graphics2D, skoro już skupiamy się na takich szczegółach przy tłumaczeniu czym jest rzutowanie ;)
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
0
Kopiuj
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?

edytowany 1x, ostatnio: cCc
R9
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 11 lat
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:

Kopiuj
addMouseListener(this);
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
0

Dodalem. Kod maina

Kopiuj
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 :/

CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
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.

Kopiuj
    public void mouseClicked(MouseEvent e)
    {
        this.x = e.getX();
        this.y = e.getY(); // tak ma być
        repaint();
    }
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
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?

Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

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


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
CC
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:58
0

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

PI
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 10 lat
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.

edytowany 1x, ostatnio: Piort

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.