代码之家  ›  专栏  ›  技术社区  ›  user366312

如何使GUI框架更大?

  •  1
  • user366312  · 技术社区  · 15 年前

    问题是,我无法使其成为800x600的尺寸。换句话说,当我运行程序时,帧太小了,我不能用它做任何事情。

    我怎样才能把镜框放大?

    我已经设置了首选的大小和设置画布边界。

    public class GameCanvas extends Canvas
    {
        private BufferStrategy buffer = null;
    
        public GameCanvas() 
        {
            setBounds(0, 0, 800, 600);
            setIgnoreRepaint(true);
    
            addKeyListener(new KeyInputHandler());
    
            requestFocus();     
        }
    
        public void addNotify()
        { 
            super.addNotify();
            this.createBufferStrategy(2);
            buffer = this.getBufferStrategy();
    
            setBounds(0, 0, 800, 600);
        }
    }
    
    public class GameGuiFrame extends JFrame
    {
        private JPanel panel = new JPanel();
        private GameCanvas canvas = new GameCanvas();
    
        public GameGuiFrame()
        {
            this.setName("My Game");
    
            this.pack();
            this.setResizable(false);
            this.setVisible(true);
    
            panel = (JPanel) this.getContentPane();
            panel.setPreferredSize(new Dimension(750,500));
            panel.setLayout(null);
            panel.add(canvas);
        }
    }
    
    public class GameManager
    {
        public static void runGameLoop()
        {
            GameGuiFrame container = new GameGuiFrame();
    
            container.addWindowListener(new WindowAdapter() 
            {
                public void windowClosing(WindowEvent e) 
                {
                    System.exit(0);
                }
            });
        }
    }
    
    public class Main
    {
        public static void main(String [] args)
        {
            GameManager.runGameLoop();
        }
    }
    
    3 回复  |  直到 15 年前
        1
  •  5
  •   Mark Peters    15 年前

    试着包装一下框架 您可以设置内容窗格的首选大小。

        2
  •  2
  •   camickr    15 年前

    与您的问题无关,但基于您发布的代码,看起来您复制了一些旧的AWT代码,并试图在Swing应用程序中使用它。

    我建议您只使用Swing组件。不需要使用带有缓冲策略的画布。只需使用JPanel,它在默认情况下是双缓冲的。您复制的代码段很旧,在Swing中不是这样做的。

    不要使用空布局。Swing被设计用于布局管理器。那么pack()方法就可以正常工作了。

    无需使用WindowListener关闭框架。现在人们只使用:

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    此外,在将组件添加到框架后,框架也应可见。

    通常,您应该使用键绑定,而不是键侦听器来侦听Swing应用程序中的键事件。

    我建议你看看 Swing tutorial 有关上述概念的更多信息。

        3
  •  1
  •   Adamski    15 年前

    你打电话给 pack() setBounds() 打电话来 在主方法内而不是 打包()