2017-08-18 4 views
0

Je suis un didacticiel vidéo qui essaie de créer un jeu Java en 2d. J'ai trouvé que l'approche de l'auteur du cours ne fonctionne pas correctement à cause de la modification de la couleur de JFrame n'apparaît pas!Modifier la couleur de fond de JFrame

Son approche, la fenêtre Classe:

package Modelos; 
import java.awt.Color; 
import java.awt.event.*; 
import javax.swing.JFrame; 

public class Ventana extends JFrame implements WindowListener { 

    public Ventana(String titulo){ 
     super(titulo); 
     this.setSize(800,600); 
     addWindowListener(this); 
     setBackground(Color.BLACK); 
    } 

    @Override 
    public void windowOpened(WindowEvent we) { 
    } 

    @Override 
    public void windowClosing(WindowEvent we) { 
     System.exit(0); 
    } 

    @Override 
    public void windowClosed(WindowEvent we) { 
    } 

    @Override 
    public void windowIconified(WindowEvent we) { 
    } 

    @Override 
    public void windowDeiconified(WindowEvent we) { 
    } 

    @Override 
    public void windowActivated(WindowEvent we) { 
    } 

    @Override 
    public void windowDeactivated(WindowEvent we) { 
    } 
} 

Panel classe qui est censé représenter graphiquement des rectangles, des triangles, des cercles pour représenter les objets de jeu:

package Modelos; 
import java.awt.*; 
import java.util.ArrayList; 
import javax.swing.JPanel; 

public class PanelFG extends JPanel { 

    ArrayList aDibujar; 

    public PanelFG(ArrayList Dibujar){ 
     this.aDibujar=Dibujar; 
    } 

    public void print(Graphics g){ 
     Dibujable dib; 
     for (int i = 0; i <aDibujar.size(); i++) { 
      dib = (Dibujable) aDibujar.get(i); 
      dib.dibujar(g); 
     } 
    } 
} 

Et Main

package Ejecuciones; 
import Modelos.*; 
import java.awt.Button; 
import java.awt.Color; 
import java.util.ArrayList; 

public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Ventana nuestraVentana = new Ventana("Juego de Naves"); 
     ArrayList ArregloDeObjetos = new ArrayList(); 

     PanelFG nuestroPanel = new PanelFG(ArregloDeObjetos); 

     nuestraVentana.add(nuestroPanel); 

     nuestraVentana.setSize(800,600); 
     nuestraVentana.setVisible(true); 
    } 
} 

RÉSULTAT: White JFRAME

Cependant mon approche:

FENETRE:

package Modelos; 
import java.awt.Color; 
import java.awt.event.*; 
import javax.swing.JFrame; 

public class Ventana extends JFrame implements WindowListener { 

    public Ventana(String titulo){ 
     super(titulo); 
     this.setSize(800,600); 
     addWindowListener(this); 
     this.getContentPane().setBackground(Color.BLACK); 
     this.setVisible(true); 
    } 

    @Override 
    public void windowOpened(WindowEvent we) { 
    } 

    @Override 
    public void windowClosing(WindowEvent we) { 
     System.exit(0); 
    } 

    @Override 
    public void windowClosed(WindowEvent we) { 
    } 

    @Override 
    public void windowIconified(WindowEvent we) { 
    } 

    @Override 
    public void windowDeiconified(WindowEvent we) { 
    } 

    @Override 
    public void windowActivated(WindowEvent we) { 
    } 

    @Override 
    public void windowDeactivated(WindowEvent we) { 
    } 
} 

classe PANEL est égale.

PRINCIPAL:

package Ejecuciones; 
import Modelos.*; 
import java.awt.Button; 
import java.awt.Color; 
import java.util.ArrayList; 

public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Ventana nuestraVentana = new Ventana("Juego de Naves"); 
     ArrayList ArregloDeObjetos = new ArrayList(); 

     PanelFG nuestroPanel = new PanelFG(ArregloDeObjetos); 
    } 
} 

BLACK correct window Je pense que cela est dû à l'auteur n'a pas utilisé getContentPane() lors de la création du principal JFrame pour définir son arrière-plan noir, et je l'ai.

J'ai suivi le sujet: JFrame.setBackground() not working -- why?

Aussi je ne comprends pas comment un code fonctionnerait correctement et d'autres ne sont pas, étant donné que nous les deux utilisent Netbeans 8.1.

Une opinion/suggestion/explication?

+0

Bien sûr, vous devriez nous remercier d'avoir lu autant de code. – Blasanka

+0

Suivez [tutoriels oracle swing] (https://docs.oracle.com/javase/tutorial/uiswing/start/index.html) au lieu de s'en tenir aux didacticiels vidéo. – Blasanka

+1

Par défaut, les panneaux ne sont pas transparents. Votre approche n'ajoute jamais le panneau au cadre, c'est pourquoi il reste noir. –

Répondre

0

Vous n'ajoutez jamais de contrôle au conteneur JPanel .... la couleur grise est l'arrière-plan couleur par défaut de JPanel et le noir est défini pour le JFrame. Exactement ce que tu veux faire?