我是Java的新手,我在我的代码中遇到了一个奇怪的情况,我正在尝试获取一个jPanel,我将ImageIcon加载到左上角,而不管Image的大小。出于某种原因,我的代码在屏幕中间垂直显示图像,但水平左对齐。
最奇怪的是,当我使用消息框进行调试时,在消息框上单击“确定”后,图像将移动到我想要的角落。这只适用于我取消注释imo完全不相关的行,告诉我绘制图像后jLabel的界限。
我的代码如下:
private void OpenWidefieldActionPerformed(java.awt.event.ActionEvent evt) {
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file;
file = fileChooser.getSelectedFile();
BufferedImage Image1 = null;
try {
Image1 = ImageIO.read(file);
} catch (IOException ex) {
Logger.getLogger(SMLMFrame.class.getName()).log(Level.SEVERE, null, ex);
}
int w = Image1.getWidth();
int h = Image1.getHeight();
ImageIcon imgIcon;
imgIcon = new ImageIcon(Image1);
jLabel1.setBounds(0, 0, w, h);
Rectangle r = jLabel1.getBounds();
jLabel1.setIcon(imgIcon);
r = jLabel1.getBounds();
//SMLMFrame.infoBox(r.toString(), "TITLE BAR MESSAGE");
jLabel1.setBounds(r);
所以基本上我的主要问题是将jLabel移到角落,但我实际上更感兴趣的是为什么在最后打开infoBox会移动它。
答案 0 :(得分:1)
出于某种原因,我的代码在屏幕中间垂直显示图像,但水平左对齐。
Swing使用布局管理器来定位组件。在不知道您正在使用哪个布局管理器的情况下,我们无法说明为什么会发生这种情况。
jLabel1.setBounds(r);
手动设置组件的边界可以临时更改组件的位置。但是,下次调用布局管理器时,将重置组件的大小/位置。例如,尝试调整框架大小,因为这会导致调用布局管理器。
因此,您的问题的解决方案是使用适当的布局管理器。也许一个简单的FlowLayout
左对齐?
阅读Layout Managers上的Swing教程中的部分以获取更多信息。