Canvas nie rysuje

0
public class Main extends JLabel{
	JFrame f ;
	Main(){
		f= new JFrame("Flappy Bird");
		f.setPreferredSize(new Dimension(500,500));
		f.setMaximumSize(new Dimension(500,500));
		f.setMinimumSize(new Dimension(500,500));
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLocationRelativeTo(null);
		f.setResizable(true);
		setOpaque(true);
		setBackground(Color.red);
		f.add(this);
		f.setVisible(true);
		f.pack();
	}
	
	void render() {
		Graphics g = this.getGraphics();
		g.setColor(Color.BLUE);
		g.fillRect(0,0,50,50);
		g.dispose();
		repaint();
	}
	public static void main(String[] args) {
		Main m = new Main();
		m.render();
	}

}

dlaczego nie przerysowuje mi tego niebieskiego kwadratu?

0

wybaczcie probowalem z JLabelem to zrobic.
Nie dziala ani na jednym ani na drugim

0

Co prawda dawno się w Swingu nie bawiłem, ale o ile pamiętam, metoda repaint(), którą wywołujesz na końcu render() kasuje ci wszystko, co wcześniej narysowałeś.
Lepiej wyjdziesz, przeładowując metodę paintComponent(Graphics g): https://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)

0

Rysowanie poza metodą paintComponent (paint dla JFrame) jest raczej bez sensu. Jeśli trzeba będzie odrysować okno - użytkownik w międzyczasie zminimalizował - to automatycznie wywołana zostanie metoda paintComponent, która domyślnie maluje prostokąt w kolorze tła.

0

Poprawiony kod:

import javax.swing.*;
import java.awt.*;
public class Main{
    JFrame f ;
    Main(){
        f = new JFrame("Flappy Bird");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.add(new MyPanel());        
        f.pack();
        f.setVisible(true);
    }
 
    public static void main(String[] args) {
        Main m = new Main();
    }
    class MyPanel extends JPanel{
        MyPanel(){
            setPreferredSize(new Dimension(500,500));
            setBackground(Color.RED);
        }
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.BLUE);
            g.fillRect(0,0,50,50);
        }       
    }    
}

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