Java BorderLayout没有正确调整大小/居中?

时间:2014-05-02 21:16:07

标签: java swing user-interface layout-manager border-layout

我知道这里有一些非常简单的事情,我做错了但我却看不到它。我已经尝试在线搜索并检查其他答案,但我找不到有同样问题的人。

我正在尝试使用NORTH中的按钮面板和SOUTH中的一组按钮创建一个JFrame,让用户加载图像进入CENTER。当用户调整JFrame的大小时,我希望中心的图像保持水平和垂直居中,但图像只保持水平居中。我正在使用JLabel来保存图像。能帮我指点一下正确的方向吗?

theJFrame.setResizable(true);

imageLabel.setIcon(new ImageIcon(theImage));
imagePanel.add(imageLabel);
theJFrame.add(imagePanel, BorderLayout.CENTER);

theJFrame.pack();

编辑: 用户Hovercraft Full of Eels发布了一个解决方案,该解决方案已被删除,因此我无法选择它,但他们建议将imageLabel设置为GridBagLayout。我做了那个改变,现在它保持垂直和水平居中。

编辑: 我很难为SSCCE削减我的代码,因为我有另一个创建并调用GUI类来运行它的类,但我可以给你一个更详细的代码示例:

    theJFrame = new JFrame();
    theFilterButtonPanel = new JPanel();
    theUtilityButtonPanel = new JPanel();
    imageLabel = new JLabel();

    theJFrame.setResizable(true);
    theJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and add filter buttons
    for (final Filter f : MY_FILTERS) {
        createFilterButton(f.getDescription());
    }

    theJFrame.add(theFilterButtonPanel, BorderLayout.NORTH);
    myUtilityButtonPanel.add(createCloseButton());
    theJFrame.add(theUtilityButtonPanel, BorderLayout.SOUTH);
    theJFrame.add(imageLabel, BorderLayout.CENTER);

当我这样做的时候,只需将imageLabel直接添加到JFrame中,它就会将它放在窗口的最左边,如果我调整它的大小,它会保持垂直居中。相反,我使用

    JPanel theImagePanel = new JPanel();
    theImagePanel.add(imageLabel);
    theJFrame.add(theImagePanel, BorderLayout.CENTER);

然后它将它水平居中,但是当窗口调整大小时它不会停留在屏幕的顶部(不会垂直居中)。

1 个答案:

答案 0 :(得分:1)

将JLabel直接添加到框架中。无需先将图像添加到面板。

仅图像JLabel的默认对齐方式是在可用空间中垂直和水平居中。