代码之家  ›  专栏  ›  技术社区  ›  Logan Serman

JPanel翻转,FlowLayout未按预期工作

  •  -1
  • Logan Serman  · 技术社区  · 17 年前

    前几天,这个代码起作用了。我更改了一些内容并重新运行了它,但现在它无法按预期工作。很明显,我改变了一些行为,但我已经返回并恢复了所有这些更改,但仍然不起作用。忽略这些信息(首先),为什么这段代码不在JPanel中放置一个15x15的JLabel网格?

    gameBoard.setLayout(new FlowLayout());
    
    for (int i = 0; i < 15; i++)
    {
        for (int j = 0; j < 15; j++)
        {
            JLabel tile = new JLabel("");                       
         tile.setHorizontalAlignment(SwingConstants.CENTER);
            tile.setPreferredSize(new Dimension(27, 27));
            tile.setBorder(new EtchedBorder());
            tile.setEnabled(false);
    
            gameBoard.add(tile);
        }
    }
    

    gameBoard是通过NetBeans的GUI生成器定义的JPanel。它有一个首选尺寸,一个最大尺寸(与首选尺寸相同)。水平/垂直可调整大小的选项是禁用的,但是当此代码运行时,每个按钮都会在一行中水平扩展,而不会中断。

    如果我理解正确的话,FlowLayout应该在元素到达其包含元素的末尾时包装元素。这是在今天之前发生的,我真的不知道为什么这种行为停止了?

    4 回复  |  直到 10 年前
        1
  •  5
  •   Pool    17 年前

    GridLayout .

    GridLayout gridLayout = new GridLayout(15, 15);
    

    由于使用了新的外观、不同的字体或某些Java VM升级,流布局可能已更改。不建议为此用途定义流布局,因为您依赖于底层大小,这些大小可能因虚拟机或外观而异。

        2
  •  3
  •   Tom Hawtin - tackline    17 年前

    为了教人如何捕鱼:

    修订控制系统很棒。甚至您的系统也在频繁地备份您的源代码。

    一种有用的调试技术是在调试成功之前将其删除。设置边框是否会导致代码中断。反过来说,你能写一个简单的程序来演示这个问题吗。

        3
  •  0
  •   MattAllegro    8 年前

    我发现使用 TableLayout 我会把它推荐给任何人。可以使用特定数量的像素定义列和行,也可以使用 TableLayout.PREFERRED

        4
  •  -1
  •   Logan Serman    17 年前