Java 使用ImageIcon设置jLabel的位置时出现问题

Java 使用ImageIcon设置jLabel的位置时出现问题,java,swing,jlabel,Java,Swing,Jlabel,我对Java非常陌生,在我的代码中遇到了一个奇怪的情况,我试图获得一个jPanel,在其中加载一个ImageIcon,使其位于左上角,而不管图像的大小。出于某种原因,我的代码在屏幕中部垂直显示图像,但水平对齐。 最奇怪的是,当我使用一个消息框进行调试时,在单击消息框上的ok之后,图像会移动到我想要的角落。这只在我取消注释imo完全不相关的行时起作用,该行在绘制图像后告诉我jLabel的边界 我的代码如下: private void OpenWidefieldActionPerformed

我对Java非常陌生,在我的代码中遇到了一个奇怪的情况,我试图获得一个jPanel,在其中加载一个ImageIcon,使其位于左上角,而不管图像的大小。出于某种原因,我的代码在屏幕中部垂直显示图像,但水平对齐。

最奇怪的是,当我使用一个消息框进行调试时,在单击消息框上的ok之后,图像会移动到我想要的角落。这只在我取消注释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会移动它

由于某种原因,我的代码在屏幕中部垂直显示图像,但左对齐。

Swing使用布局管理器定位组件。如果不知道您使用的是哪种布局管理器,我们无法说出发生这种情况的原因

jLabel1.setBounds(r);
手动设置零部件的边界可以临时更改零部件的位置。但是,下次调用布局管理器时,将重置组件的大小/位置。例如,尝试调整框架的大小,因为这将导致调用布局管理器

因此,问题的解决方案是使用适当的布局管理器。可能是一个简单的左对齐的
FlowLayout


有关更多信息,请阅读Swing教程中的部分。

请提供一个简短的可运行示例(),这样我们也可以重现您的问题并提供解决方案。