Quadro de janela cobrindo conteúdo gráfico
Este é o meu primeiro post aqui e eu tenho uma pergunta que parece realmente nooby, mas isso tem me incomodado pela última hora ou mais.
Estou criando um JFrame simples com um JPanel, mas o quadro de borda do Windows 7 parece estar bloqueando minha visão de partes do painel. Por exemplo, se eu desenhar um pequeno quadrado na coordenada 0,0, ele não aparecerá e suspeito que esteja atrás do quadro da janela.
Eu tentei mexer com pack, setsize, setpreferred size, setresizable e layouts diferentes, mas não consigo mostrá-lo para mostrar os 20 pixels mais ou menos!
Isso é o que eu tenho:
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);
}
EDITAR:
Obrigado por todas as suas respostas, desculpe pela falta de informação :)
Estou usando uma estratégia de buffer duplo que vi em um livro. gameRender e paintScreen estão em um loop de jogo padrão. Minha classe RedSunGame estende o JFrame. Todo o código relevante que você poderia solicitar além do acima:
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); }
}
Com minhas configurações atuais, é assim.http://i.imgur.com/qaabC.png
Isto é o que acontece se eu tiver g2d.fillRect (30, 30, 10, 10), a única mudança sendo as coordenadas 30,30 em vez de 0,0. Está definitivamente se escondendo atrás da borda no topo.http://i.imgur.com/uzfFe.png
Além disso, configurá-lo para BorderLayout.CENTER não parece fazer diferença em nenhum desses casos.
(desculpe não permitir que novos usuários postem imagens)
EDITAR: Eu percebi isso. Eu estava desenhando diretamente para o JFrame. @Guillaume Polet Eu vejo por que você não deve substituir o método de pintura de JFrames como ele desenha para o quadro e não o painel que deve realmente exibir conteúdo !! obrigado