Оконная рама, покрывающая графический контент

это мой первый пост здесь, и у меня есть вопрос, который кажется очень странным, но это беспокоило меня в течение последнего часа или около того.

Я делаю простой JFrame с JPanel в нем, но рамка Windows 7, по-видимому, блокирует мой вид частей панели. Например, если я нарисую маленький квадрат с координатой 0,0, он не появится, и я подозреваю, что он находится за рамкой окна.

Я пытался поэкспериментировать с пакетом, размерами, заданным размером, размерами и разными макетами, но не могу отобразить верхние 20 пикселей или около того!

Вот что у меня есть:

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:

Спасибо за все ваши ответы, извините за отсутствие информации :)

Я использую стратегию двойного буфера, которую я видел в книге. gameRender и paintScreen находятся в стандартном игровом цикле. Мой класс RedSunGame расширяет JFrame. Весь соответствующий код вы можете запросить в дополнение к выше:

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

С моими текущими настройками это выглядит так. http://i.imgur.com/qaabC.png

Это то, что происходит, если у меня есть g2d.fillRect (30, 30, 10, 10), единственное изменение - координаты 30,30 вместо 0,0. Это определенно скрывается за границей наверху. http://i.imgur.com/uzfFe.png

Кроме того, установка его в BorderLayout.CENTER, похоже, не имеет значения в любом из этих случаев.

(извините, но новые пользователи не могут публиковать изображения)

EDIT: Я понял. Я рисовал прямо в JFrame. @Guillaume Polet Я понимаю, почему вы не должны переопределять метод рисования JFrames, поскольку он рисует в кадре, а не на панели, которая должна отображать содержимое !! Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос