Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30

    Problema con il metodo setBackground(Color) di JPanel.

    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?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema con il metodo setBackground(Color) di JPanel.

    Originariamente inviato da mattia96
    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?
    setBackground setta la proprietà "background" del componente cioè il colore di sfondo.
    Tale colore di sfondo viene già gestito e disegnato dal super.paintComponent (cioè dal framework) ma a patto che il componente sia "opaco" (setOpaque(true) ).
    E comunque settare tale proprietà nel paintComponent non mi pare una buona cosa.

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.