C'est mon premier message ici et j'ai une question qui semble vraiment nooby, mais cela me préoccupe depuis une heure environ.
Je crée un simple JFrame contenant un panneau JPanel, mais le cadre de bordure de Windows 7 semble bloquer la vue de certaines parties du panneau. Par exemple, si je dessine un petit carré aux coordonnées 0,0, il n'apparaît pas et je soupçonne qu'il se trouve derrière le cadre de la fenêtre.
J'ai essayé d'utiliser pack, setsize, setpreferred size, setresizable et différentes mises en page, mais je n'arrive pas à afficher les 20 premiers pixels environ !
C'est ce que j'ai :
public RedSunGame() {
super("Red Sun");
rs = new JPanel(new BorderLayout(), true);
rs.setPreferredSize(new Dimension(WIDTH, HEIGHT));
add(rs, "Center");
setPreferredSize(new Dimension(WIDTH, HEIGHT));
pack();
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
EDIT :
Merci pour toutes vos réponses, désolé pour le manque d'informations :)
J'utilise une stratégie de double tampon que j'ai vue dans un livre. gameRender et paintScreen sont dans une boucle de jeu standard. Ma classe RedSunGame étend JFrame. Tout le code pertinent que vous pourriez demander en plus de ce qui précède :
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private JPanel rs;
private Graphics2D g2d;
private Image dbImage;
private void gameRender() {
//create buffer
if (dbImage == null){
dbImage = createImage(WIDTH, HEIGHT);
g2d = (Graphics2D)dbImage.getGraphics();
}
//clear screen
g2d.setColor(Color.white);
g2d.fillRect(0, 0, WIDTH, HEIGHT);
g2d.setColor(Color.blue);
g2d.setFont(font);
g2d.drawString("FPS: " + FPS, 0, HEIGHT);
g2d.fillRect(30, 30, 10, 10);
}
private void paintScreen() {
Graphics g;
try {
g = getGraphics();
if ((g != null) && (dbImage != null))
g.drawImage(dbImage, 0, 0, null);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
catch (Exception e)
{ System.out.println("Graphics context error: " + e); }
}
Avec mes paramètres actuels, cela ressemble à ceci. http://i.imgur.com/qaabC.png
Voici ce qui se passe si j'utilise g2d.fillRect(30, 30, 10, 10), le seul changement étant les coordonnées 30,30 au lieu de 0,0. Il se cache définitivement derrière la bordure du haut. http://i.imgur.com/uzfFe.png
De même, le fait de lui attribuer la valeur BorderLayout.CENTER ne semble pas faire de différence dans tous ces cas.
(désolé, il ne permet pas aux nouveaux utilisateurs de poster des images)
EDIT : J'ai compris. Je dessinais directement dans le JFrame. @Guillaume Polet Je vois pourquoi il ne faut pas surcharger la méthode paint de JFrames car elle dessine sur le cadre et non sur le panneau qui doit afficher le contenu !!! Merci