我知道这里有一些非常简单的事情我做错了,但我就是看不出来。我试着在网上搜索并检查其他答案,但我找不到有同样问题的人。
我正在尝试创建一个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的默认对齐方式是在可用空间中垂直和水平居中。