Ramka okna obejmująca zawartość graficzną

to jest mój pierwszy post tutaj i mam pytanie, które wydaje się naprawdę nooby, ale to mnie niepokoi od około godziny.

Tworzę prosty JFrame z JPanelem, ale ramka graniczna Windows 7 wydaje się blokować widok części panelu. Na przykład, jeśli narysuję mały kwadrat o współrzędnych 0,0, nie pojawi się i podejrzewam, że jest za ramą okna.

Próbowałem bawić się z pakietami, setize, setpreferred size, setresizable i różnymi układami, ale nie mogę go wyświetlić, aby pokazać 20 najlepszych pikseli lub więcej!

Oto co mam:

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);
}

EDYTOWAĆ:

Dziękujemy za wszystkie odpowiedzi, przepraszam za brak informacji :)

Używam strategii podwójnego bufora, którą widziałem w książce. gameRender i paintScreen są w standardowej pętli gry. Moja klasa RedSunGame rozszerza JFrame. Cały odpowiedni kod, o który możesz poprosić oprócz powyższego:

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);  }
}

Z moimi aktualnymi ustawieniami wygląda to tak.http://i.imgur.com/qaabC.png

Tak się dzieje, jeśli mam g2d.fillRect (30, 30, 10, 10), jedyną zmianą są współrzędne 30,30 zamiast 0,0. Zdecydowanie ukrywa się za granicą.http://i.imgur.com/uzfFe.png

Również ustawienie go na BorderLayout.CENTER nie wydaje się mieć znaczenia w żadnym z tych przypadków.

(przepraszam, że nie pozwala nowym użytkownikom publikować obrazów)

EDYTOWAĆ: Rozgryzłem to. Rysowałem bezpośrednio do JFrame. @Guillaume Polet Widzę, dlaczego nie powinieneś nadpisywać metody malowania JFrames, ponieważ rysuje się ona na ramce, a nie na panelu, który powinien wyświetlać zawartość !! Dzięki