JPanel рисует себя под строкой заголовка JFrame - PullRequest
2 голосов
/ 19 февраля 2012

У меня есть изображение размером 500 на 500 пикселей, которое я пытаюсь нарисовать на JPanel, который находится внутри JFrame.Вот код, который у меня пока есть:

public class Game extends JFrame {
    // Other code...

   setTitle("Game");

   JPanel panel = new JPanel();
   panel.setPreferredSize(new Dimension(500, 500));

   add(panel);
   setSize(500, 500);

   setIgnoreRepaint(true);

   // Handle a close event gracefully.
   addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
           System.exit(0);
       }
   });

   addKeyListener(new MainMenuState(this));

   setResizable(false);
   pack();
   setVisible(true);

Я могу нарисовать в JPanel, но похоже, что верхний левый угол JPanel рисуется в 0,0 на JFrame, который находится под строкой заголовка,Я пытался установить менеджеры компоновки на JFrame, но это не сработало.Я мог бы вручную сместить JPanel, но я не думаю, что должен это делать (я думал, что pack() должен был взять машину этого).

Ответы [ 3 ]

4 голосов
/ 19 февраля 2012

Почему вы создаете JFrame внутри JFrame? Если вы extends JFrame просто сделаете это:

public class Game extends JFrame {

    public Game() {
        this.setTitle("Application");

        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(500, 500));

        this.add(panel);
        this.setIgnoreRepaint(true);

        // Handle a close event gracefully.
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        // example, use your own layout manager - see text below
        this.setLayout(new FlowLayout());

        this.pack();
        this.setResizable(false);
        this.setVisible(true);
    }
}

А теперь к вашему вопросу. Если вы хотите иметь маржу, вам нужно будет использовать менеджер макетов .

4 голосов
/ 19 февраля 2012

1) Поместите это Изображение как Значок в JLabel

2) использовать Image # getScaledInstance (int width, int height, int hints) для масштабирования

0 голосов
/ 03 июня 2014

Я только что решил и решил точно такую ​​же проблему.

Мой main читает:

public static void main(String[] args) {
    JFrame main = new JFrame("Game");
    main.setLayout(new BorderLayout);
    JPanel game = new Game();
    game.setPreferredSize(new Dimension(500, 500));
    main.add(game, BorderLayout.CENTER);
    main.pack();
    main.setVisible(true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...