为什么JLabel在我的JFrame类中不可见



我正在努力学习java,但我遇到了一些问题,找到答案对我来说并不简单。我想做的任务似乎很简单。

我想给Frame添加一个标签。MyFrame是一个JFrame类,具有一些基本的修改,如大小、颜色等。

主代码如下:

public class Main {
    public static void main(String[] args)
    {
        // a GUI window to add components
        MyFrame myFrame = new MyFrame();
    
        ImageIcon image = new ImageIcon("Images/background.png");
        //a GUI display area for a string of text,image or both
        JLabel label = new JLabel("Why it is happening?",image,JLabel.CENTER);
        myFrame.add(label);
        //label.setText("Why it is happening?");// set text of label
        //label.setIcon(image);
        label.setHorizontalTextPosition(JLabel.CENTER);
        
    }
}

我得到的结果是我想要的:正确结果

当我评论关于标签的最后一行时,它正在改变我的UI外观。它只显示JFrame,根本没有我的标签。

不工作代码:

public class Main {
    public static void main(String[] args)
    {
        // a GUI window to add components
        MyFrame myFrame = new MyFrame();
    
        ImageIcon image = new ImageIcon("Images/background.png");
        //a GUI display area for a string of text,image or both
        JLabel label = new JLabel("Why it is happening?",image,JLabel.CENTER);
        myFrame.add(label);
        //label.setText("Why it is happening?");// set text of label
        //label.setIcon(image);
        //Commented
        //label.setHorizontalTextPosition(JLabel.CENTER);
        
    }
}

以下是图形结果:不工作标签

我错过了一些基本信息吗?我认为两者应该一样工作。

这是一个有趣的例子。乍一看,我同意@VGR的观点。但是,如果这一切都取决于绘画等的顺序,那么我会期望调用"repaint(("甚至"invalidate(("来解决问题。看起来不像…所以也许这是一个正在运行的bug。

import javax.swing.*;
public class Main
{
    public static void main(String[] args)
    {
        // a GUI window to add components
        JFrame myFrame = new JFrame();
        ImageIcon image = new ImageIcon("Images/background.png");
        myFrame.setSize(500,250);
        myFrame.setVisible(true);
        JLabel label = new JLabel("Why it is happening?", image, JLabel.CENTER);
        myFrame.add(label);
        //label.setHorizontalTextPosition(JLabel.CENTER); 
        label.repaint(); //Should have the same effect as the line above, but doesn't!
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

相关内容

  • 没有找到相关文章

最新更新