Java 为什么JFrame具有.setSize时不添加图像

Java 为什么JFrame具有.setSize时不添加图像,java,swing,jframe,imageicon,setbounds,Java,Swing,Jframe,Imageicon,Setbounds,我是一个有点新手的程序员,我有一些麻烦添加图像到我的框架。虽然我通常知道如何添加图像,但在这种特定情况下它不起作用 public class Tutorial extends JFrame{ Tutorial(){ JFrame frame = new JFrame("ImageTutorial"); frame.setVisible(true); frame.setSize(750,850); frame.setDef

我是一个有点新手的程序员,我有一些麻烦添加图像到我的框架。虽然我通常知道如何添加图像,但在这种特定情况下它不起作用

public class Tutorial extends JFrame{

    Tutorial(){

        JFrame frame = new JFrame("ImageTutorial");
        frame.setVisible(true);
        frame.setSize(750,850);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);
        ImageIcon image = new ImageIcon(getClass().getResource("Green Block.png"));
        JLabel imagelabel = new JLabel(image);
        imagelabel.setBounds(10, 10, 75, 75);
        imagelabel.setOpaque(true);
        frame.add(imagelabel);  
现在,我找到了问题所在,但我不明白“为什么”这是个问题。当我移除

        frame.setSize(750,850);

图像显示了,但当它在那里时却没有。相框的大小如何影响图像的显示?我如何绕过它?

只是好奇,从逻辑上讲,是什么让你认为在添加任何组件之前,相框应该是可见的?从逻辑上讲,首先添加组件,然后使框架可见,这似乎不正确。这就像在画家还没画上任何东西之前就在画廊里展示一幅画一样。这毫无意义。我非常怀疑设置大小与此有关。如果不设置帧的大小,则帧将显示为尽可能小。调整框架大小时,会导致重新绘制,然后显示添加的标签但通常,您希望在添加所有组件后始终将框架设置为可见,以避免此问题


旁注:您应该远离空布局。您需要学会使用并让他们为您进行动态大小调整和定位。

Java GUI可能需要在多种平台上、不同的屏幕分辨率和使用不同的PLAF工作。因此,它们不利于部件的精确放置。为一个健壮的GUI组织组件,而不是,或者,以及布局填充和边框。顺便说一句-使用
null
布局可能是您看到的所有其他问题的原因。