JFrame,JPanel和Gridlayout问题

时间:2017-05-14 05:38:11

标签: java swing jframe jpanel

作为一个快速概述,我的项目涉及获取.txt文件并将其转换为2d数组,然后将其绘制到JFrame中。在我测试时,我使用JButtons而不是稍后将构建的自定义类。我遇到了两个我不知道如何解决的错误。对于这些图片,这都是基于2行和16个Columes的Gridlayout。当我将JButtons添加到面板时,它看起来像this

当我将它们添加到JFrame时,它看起来像this

以下是我创建JFrame和JPanel并呈现它的代码:

    /**
 * This method creates a JFrame, JPanel, and then renders
 * all of the level in the JFrame
 */
public void render()
{
    JFrame frame = new JFrame("<Insert Title>");

    //Make it full screen for any computer monitor
    frame.setSize(JFrame.MAXIMIZED_HORIZ, JFrame.MAXIMIZED_HORIZ);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setUndecorated(true);
    frame.setVisible(true);


    JPanel panel = new JPanel(grid);
    frame.setLayout(grid);
    frame.add(panel);

    panel.getInputMap(IFW).put(KeyStroke.getKeyStroke("ESCAPE"), "quit");
    panel.getActionMap().put("quit", quit);

    //Draw!
    for(int row = 0; row < drawStuff.length; row++)
    {
        for(int col = 0; col < drawStuff[row].length; col++)
        {
            //Either panel.add or frame.add here
            panel.add(new JButton("Row :"+row+" Col: "+col));
        }
    }
    panel.revalidate();
    panel.repaint();
}

我在这里做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

删除frame.setLayout(grid); - 这将允许panel占据框架的整个内容区域,而不是一列中的一行

frame.setSize(JFrame.MAXIMIZED_HORIZ, JFrame.MAXIMIZED_HORIZ)真的不是你想的那样,除非你想要一个2x4的框架