BorderLayout的作用类似于流程布局

时间:2015-11-24 22:40:37

标签: java user-interface border-layout

我很难弄清楚为什么这个边界布局仍然像流程布局一样......

我先试了这个:

JPanel canvas = new JPanel(new BorderLayout());
add(canvas);

text = new JLabel("hey");
canvas.add(text, BorderLayout.SOUTH);

然后我尝试了这个:

JPanel canvas = new JPanel(new BorderLayout());
add(canvas)
JPanel canvasSouth = new JPanel(new BorderLayout());
canvas.add(canvasSouth, BorderLayout.SOUTH);

text = new JLabel("hey");
canvasSouth.add(text);

然后我说拧了它,我只是想把所有东西都扔掉:

    JPanel canvas = new JPanel(new BorderLayout());
    add(canvas);

    JPanel canvasSouth = new JPanel(new BorderLayout());
    canvas.add(canvasSouth, BorderLayout.SOUTH);

    JPanel canvasNorth = new JPanel(new BorderLayout());
    canvas.add(canvasNorth, BorderLayout.NORTH);

    JPanel canvasEast = new JPanel(new BorderLayout());
    canvas.add(canvasEast, BorderLayout.EAST);

    JPanel canvasWest = new JPanel(new BorderLayout());
    canvas.add(canvasWest, BorderLayout.WEST);

    text = new JLabel("hey");
    canvasSouth.add(text);

我以前遇到过这个问题而且从来没有能够自己解决这个问题。因此,我问你们所有人。谢谢。

1 个答案:

答案 0 :(得分:1)

问题是一个复合问题......

  1. 您将canvas添加到仍在使用JPanel的{​​{1}},FlowLayout会使用canvas的{​​{1}}来确定最佳效果布局
  2. 您要将空preferredSize添加到JPanel的所有位置,因为它们的默认BorderLayoutpreferredSize,就像您没有添加什么都没有。所以唯一能为0x0和它的父容器提供任何大小调整提示的是canvas
  3. 相反,抛弃JLabel。只需将父容器的布局设置为canvas即可。为要添加到父容器的其他组件提供一些调整提示。

    BorderLayout

    BorderLayout