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);
}
}
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);
}
}
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?
Bien sûr, vous devriez nous remercier d'avoir lu autant de code. – Blasanka
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
Par défaut, les panneaux ne sont pas transparents. Votre approche n'ajoute jamais le panneau au cadre, c'est pourquoi il reste noir. –