Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51

    setBackground(Color.yellow); non funziona

    Salve,
    ho provato a cambiare il colore di fondo sia nel JForm che nel JComponent ma non ne vuole sapere mi da sempre il solito grigio?
    codice:
    import java.awt.*;
    import java.awt.geom.*;
    import javax.swing.*;
     
    public class Graf_01{  
        public static void main(String[] args) {
           SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                 JFrame f = new JFrame("Disegno un ellisse");
                    f.setBounds(800, 500, 300, 245);
                     f.setBackground(Color.yellow);
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                 
                    f.add(new MyComp());
                    f.setVisible(true);          
                }            
           });
        }
    }
    class MyComp extends JComponent{
        public MyComp(){
          setBackground(Color.yellow);  
        }
        final BasicStroke spessore = new BasicStroke(5.0f);
        public void paintComponent(Graphics g) { 
           super.paintComponent(g);
           Graphics2D g2d =(Graphics2D)g;
           g2d.setBackground(Color.yellow);
           g2d.setStroke(spessore);
           Ellipse2D.Double fc = new Ellipse2D.Double(95,30,100,150);
           g2d.draw(fc);
        }
    }

    In pratica glie l'ho impostato da per tutto ma niente da fare.
    f.setBackground(Color.yellow);
    setBackground(Color.yellow);
    g2d.setBackground(Color.yellow);

    Grazie per la pazienza.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51
    Ora funziona richiamando il contetPane.
    f.getContentPane().setBackground(Color.yellow);
    Ma non dovrebbe comunque averlo impostato nel JComponente?
    o nell'ogetto Graphics?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da cersil Visualizza il messaggio
    f.setBackground(Color.yellow);
    Non funziona (o per meglio dire: non lo "vedi") con questo. JFrame è un componente abbastanza complesso. Non è solo un banale "contenitore" (come invece lo è il Frame di AWT). Un JFrame contiene un JRootPane come unico figlio, che contiene a sua volta altri componenti tra cui il ben noto "content pane" che è dove si inseriscono solitamente i componenti.
    Settare un background sul JFrame direttamente è troppo "dietro" per cui non vedresti il colore di sfondo.

    Quote Originariamente inviata da cersil Visualizza il messaggio
    setBackground(Color.yellow);
    Non funziona ma per un motivo, la documentazione di setBackground di JComponent lo dice chiaramente:

    public void setBackground(Color bg)

    Sets the background color of this component. The background color is used only if the component is opaque, and only by subclasses of JComponent or ComponentUI implementations. Direct subclasses of JComponent must override paintComponent to honor this property.

    Quindi nel caso di una tua sottoclasse che estende direttamente JComponent, spetta a te onorare il disegno del background all'interno del paintComponent.

    Quote Originariamente inviata da cersil Visualizza il messaggio
    g2d.setBackground(Color.yellow);
    Neanche questo funziona da solo. La documentazione di setBackground di Graphics2D lo dice chiaramente:

    public abstract void setBackground(Color color)

    Sets the background color for the Graphics2D context. The background color is used for clearing a region. [....]
    Setting the background color in the Graphics2D context only affects the subsequent clearRect calls and not the background color of the Component.

    Quindi questo setBackground NON cambia la proprietà background del component. Invece è uno stato del Graphics2D che serve solo per il clearRect


    MORALE:
    se in un tuo componente che estende direttamente JComponent vuoi applicare correttamente il background del componente:

    codice:
        public void paintComponent(Graphics g) {
           super.paintComponent(g);
    
           Graphics2D g2d = (Graphics2D) g;
           g2d.setBackground(getBackground());
           g2d.clearRect(0, 0, getWidth(), getHeight());
    
           // .....
        }

    Poi chiaramente devi impostare la proprietà background del componente, nel costruttore o esternamente nel tuo run()
    Ultima modifica di andbin; 09-02-2018 a 18:20
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    51
    Grazie, mi state facendo crescere la passione. Sono contento di aver trovato un ambiente così stimolante.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.