JPanel在JFrame标题栏下面绘制自己

时间:2012-02-18 22:36:38

标签: java swing user-interface

我有一个500 x 500像素的图像,我正在尝试绘制到JFrame中的JPanel。这是我到目前为止的代码:

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的左上角是在JFrame的0,0处绘制的,它位于标题栏的下方。我已经尝试在JFrame上设置布局管理器,但这似乎不起作用。我可以手动抵消JPanel,但我不认为我必须这样做(我认为pack()应该开车了。)

3 个答案:

答案 0 :(得分:4)

1)将此Image作为Icon添加到JLabel

2)使用Image#getScaledInstance(int width, int height, int hints)进行缩放

答案 1 :(得分:4)

为什么要在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);
    }
}

现在回答你的问题。如果您想要一些保证金,则必须使用layout manager

答案 2 :(得分:0)

我刚刚解决了同样的问题。

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