java - JFrame、JPanel 和 Gridlayout 问题

标签 java swing jframe jpanel

作为快速概述,我的项目涉及获取 .txt 文件并将其转换为二维数组,然后将其绘制到 JFrame 中。在测试时,我使用 JButtons 而不是稍后构建的自定义类。我遇到了两个我不知道如何解决的错误。对于这些图片,这全部基于 2 行 16 列的网格布局。当我将 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();
}

我在这里做错了什么吗?

谢谢!

最佳答案

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

frame.setSize(JFrame.MAXIMIZED_HORIZ, JFrame.MAXIMIZED_HORIZ) 确实没有按照您的想法进行操作,除非您想要一个 2x4 的框架

关于java - JFrame、JPanel 和 Gridlayout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960724/

相关文章:

java - Apache Spark Java中如何将数据集的数组类型转换为字符串类型

java - 读取二维数组并转置

java - 在 Java 中扩展 JFrame 的类上绘画

java - 制作一个简单的 RPG - 创建一个新的 JFrame

java - 从更新语句返回结果集?

java - 使用 eclipse 导出可运行的 jar

java - 拖动对象时更改其颜色

java - CardLayout 的替代方案不保留对所包含组件的引用

java - 为什么这个 JPanel 实例的大小不正确?

java - 如何从JFrame中添加图片,附加到边框