Java Swing. Czemu czasem nic nie jest rysowane?

0

Jakieś 3 uruchomienia na 10 nic nie rysuja i nie wiem czemu tak się dzieje.

Ekstra pytanie:
Nie bardzo rozumiem jak działa getContentPane()
jak róznią się te dwie linijki kodu? Której użyć?
frame.getContentPane().add(new Board());
frame.add(new Board());

class Game {
    JFrame frame;
    static final int width = 500;
    static final int height = 500;

    Game() {
        frame = new JFrame();
        frame.setSize(width,height);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.getContentPane().add(new Board());
        //frame.add(new Board());
    }

    public static void main(String[] args) {
        new Game();
    }
}

class Board extends JPanel {
    public void paint(Graphics g) {
        g.fillRect(20, 20, 100, 100);
    }
}
0

u mnie działa zawsze: rysuje maly czarny kwadrat. Uzywam intelij, Game i Board sa w oddzielnych plikach, uruchamiam program przez Game. Napisz wiecej o swoim srodowisku lub wrzuc screena. Czy pojawiaja sie jakies błędy?

0

Pisze na linuxie w eclipsie java8
Ten sam kod i trzy różne efekty: szary lub czarny kwadrat lub brak kwadratu

0

frame.setVisible(true);
To wywołuj na końcu (jak już wszystkie elementy są pododawane).

2

Generalnie nie powinieneś nadpisywać metody paint, tylko paintComponent

Amy Fowler napisał(a) w Painting in AWT and Swing:

Swing programs should override paintComponent() instead of overriding paint()

A nawet wtedy powienieś wywołać super.paintComponent. Obie metody, paint i paintComponent robią dużo rzeczy. Jak je nadpiszesz, i nie wywołasz supera mogą się dziać dziwne rzeczy.
Ponadto, żeby przerysować komponenty musisz wywołać metodę repaint (albo tak jak wyżej napisano, wywołać setVisible na samym końcu, bo setVisible w środku wywołuje repaint)
Poczytaj sobie:
https://docs.oracle.com/javas[...]l/uiswing/painting/index.html
https://www.oracle.com/technetwork/java/painting-140037.html

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