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



我知道这里有一些非常简单的事情我做错了,但我就是看不出来。我试着在网上搜索并检查其他答案,但我找不到有同样问题的人。

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

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

编辑:用户气垫船充满鳗鱼张贴了一个解决方案,已被删除,所以我不能选择它,但他们建议设置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);

则它水平居中,但当窗口大小调整时,它保持在屏幕顶部(不垂直居中)。

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

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

相关内容

  • 没有找到相关文章

最新更新