Co wywołuje tę metodę w podanym kodzie?

Odpowiedz Nowy wątek
2018-11-04 21:50
0

Hej,

Napotkałem ostatnio na taki sposób jak poniżej - rysowania figur na ekranie. Nie rozumiem tutaj jednej rzeczy. Dlaczego metoda Rectangle() jest wywoływana i rysuje na ekranie czerwony prostokąt skoro nie znajduje się ona w konstruktorze? Co ją wywołuje? Jeśli stworzę ramkę w inny sposób - poprzez utworzenie obiektu JFrame i za jego pomocą utworzę ramkę w konstruktorze to metoda Rectangle() się nie wywoła. Dlaczego poniższy sposób z użyciem słowa "this" sprawia, że metoda jest wywoływana?

//Edit; Kod edytowany, teraz jest poprawny :>

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Grap extends JFrame {

    Graphics g;

    public Grap() {

        this.setTitle("remember");
        this.setSize(500, 500);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

    }

    public void paint(Graphics g) {
        g.setColor(Color.RED);
        g.fillRect(0, 0, 100, 100);
    }

    public static void main(String[] args) {

    new Grap();

}
}
edytowany 2x, ostatnio: SlowSheep, 2018-11-04 22:11

Pozostało 580 znaków

2018-11-04 21:57
0

Jesli ten kod powyżej pokazuje Ci czerwony prostokąt to znaczy, że masz zepsutą Javę.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
LOL, odpalam i szukam tego prostokąta...:) - lion137 2018-11-04 21:58

Pozostało 580 znaków

2018-11-04 22:04
0

Eh, faktycznie, zmieniłem nazwę metody na Rectangle i prostokąt się nie pojawia. :)

Metoda miała nazwę paint(). Jednak moje pytanie jest aktualne. Dlaczego metoda paint() się wywołuje gdy ramka jest tworzona jak powyżej? Nie działa ona natomiast gdy ramka jest tworzona obiektem JFrame.

Pozdrawiam.

Pozostało 580 znaków

2018-11-04 22:35
1

Jeżeli Grap nie dziedziczy po Component i nie jest jakąś częścią (child) okna to będzie wyrysowane. Dziedziczenie po JFrame pewnie załatwia sprawę (ale nie powinno tak się tego załatwiać).
Paint jest wywoływany przez system renderowania i z tego co rozumiem to raczej paintComponent powinno mieć implementacje.

"painting actually begins higher up the class heirarchy, with the paint method (defined by java.awt.Component.) This method will be executed by the painting subsystem whenever you component needs to be rendered"
https://docs.oracle.com/javas[...]/uiswing/painting/closer.html

edytowany 1x, ostatnio: krsp, 2018-11-04 22:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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