Je crée un JFrame et dessine un rectangle dessus. Ça ne marche pas, parfois c'est complètement noir et parfois complètement blanc, voici mes méthodes. Par conséquent, la méthode de rendu est appelée deux fois car, la première fois qu'elle crée le tampon, ignore également le framerate, elle est irrelavée en ce moment.Ce code n'affichera pas un rectangle, mais il devrait
Edit1: J'ai résolu un problème: Il dessine un rectangle maintenant, mais parfois il affiche simplement un écran blanc. Je ai encore besoin de résoudre ce problème
Edit2: Je ne cherche pas seulement la solution, je cherche aussi la raison pour laquelle mon problème se produit, donc je ne suis pas seulement écrire aveuglément le code.
public MyFrame(String title,int width,int height)
{
super(title);
this.setSize(width,height);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setUndecorated(true);
this.addKeyListener(new KeyInput());
this.setVisible(true);
}
public void draw(Graphics2D g,int arg)
{
g.setColor(new Color(0,0,0,255));
g.fillRect(0,0,SIZE,SIZE);
g.setColor(new Color(255,255,255));
g.fillRect(0,0,50,50);
}
public void render(int arg)
{
BufferStrategy bs=this.getBufferStrategy();
if(null==bs)
{
this.createBufferStrategy(3);
}
else
{
Graphics2D g=(Graphics2D)bs.getDrawGraphics();
g.setColor(new Color(0,0,0,255));
g.fillRect(0,0,this.getWidth(),this.getHeight());
BufferedImage canvas=new BufferedImage(SIZE,SIZE,2);
int s=Math.min(this.getWidth(),this.getHeight());
g.drawImage(canvas,(this.getWidth()-s)/2,(this.getHeight()-s)/2,s,s,this);
Graphics2D g2=canvas.createGraphics();
this.draw(g2,arg);
bs.show();
g.dispose();
g2.dispose();
}
}
public static void main(String[] args)
{
Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
FRAME=new MyFrame("Insert name here!",d.width,d.height,1);
FRAME.render(0);
FRAME.render(0);
}
Modifier: ce n'est plus nécessaire, j'ai réussi à résoudre le problème, merci pour votre aide de toute façon.
1) * "INSERT_FRAME_NAME_HERE" * Cela ne devrait pas non plus être le cas. Veuillez apprendre la nomenclature Java courante (conventions de nommage - par exemple 'EachWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute' sauf s'il s'agit d'une 'UPPER_CASE_CONSTANT') et l'utiliser de manière cohérente. Même dans l'exemple de code. 2) Pour une meilleure assistance plus tôt, postez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). –
Ok, je vais le changer. –
S'il vous plaît consulter: [Leçon: Performing Custom Painting] (http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html): tutoriel d'introduction aux graphiques Swing –