Salve a tutti, devo fare un programma usando la libreria swing che crei un Frame il cui pannello del contenuto contenga un rettangolo colorato(la cui posizione varierà ogni volta che il Frame viene ridimensionato). Ecco il codice:

codice:
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class MioPanel extends JPanel {

private int x=100;
private int y=300;
private Random rr=new Random();



public void paintComponent(Graphics g1){
	super.paintComponent(g1);
	Color colore=new Color(rr.nextInt(255),rr.nextInt(255),rr.nextInt(255));
	g1.setColor(colore);
        g1.fillRect(rr.nextInt(255),rr.nextInt(255),x,y);
}
}

import javax.swing.*;
import java.awt.*;
import java.util.*;
public class MioFrame extends JFrame{

Random rr=new Random();

	public MioFrame() {
		super("RETTANGOLO COLORATO");
		setSize(400,400);
		setLocation(300,300);
		setVisible(true);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		MioPanel pannello=new MioPanel();
		Container contenitore=getContentPane();
		Color colore1=new Color(rr.nextInt(255),rr.nextInt(255),rr.nextInt(255));
		pannello.setBackground(colore1);
		contenitore.add(pannello);
	        repaint();
        }
}


public class Test {

      public static void main(String[] args) {
		MioFrame finestra=new MioFrame();

	}
}
Questo programma fa esattamente quello che deve fare, ma ho provato a fare una piccola modifica e a fronte di essa il rettangolo cambia colore e posizione ogni istante, e anche il colore di sfondo del pannello cambia ogni istante. Ecco il codice modificato(solo le classi MyPanel e MyFrame(Test resta uguale)):

codice:
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class MioPanel extends JPanel {

private int x=100;
private int y=300;
private Random rr=new Random();



public void paintComponent(Graphics g1){
	super.paintComponent(g1);
	Color colore=new Color(rr.nextInt(255),rr.nextInt(255),rr.nextInt(255));
        Color colore1=new Color(rr.nextInt(255),rr.nextInt(255),rr.nextInt(255));                                           
	setBackground(colore1); //Questa riga e quella precedente sono state spostate
        g1.setColor(colore);                  
        g1.fillRect(rr.nextInt(255),rr.nextInt(255),x,y);
}
}

import javax.swing.*;
import java.awt.*;
import java.util.*;
public class MioFrame extends JFrame{

Random rr=new Random();

	public MioFrame() {
		super("RETTANGOLO COLORATO");
		setSize(400,400);
		setLocation(300,300);
		setVisible(true);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		MioPanel pannello=new MioPanel();
		Container contenitore=getContentPane();
		contenitore.add(pannello);
	        repaint();
        }
}
Come potete vedere la modifica consiste nell'aver spostato il metodo setBackground dalla classe MyFrame a quella MyPanel.
Come mai dopo la modifica il contenuto del pannello si comporta in quel modo?