繁体   English   中英

甚至没有使用的ImageIcon正在影响我的JFrame / JPanel。 为什么?

[英]An ImageIcon not even used is affecting my JFrame/JPanel. Why?

我希望这不是一个愚蠢的首要问题。 无论如何,我似乎都找不到答案。

我有这个JFrame构造函数,其中将JPanel添加到JFrame JPanelJFrame绘制一个Rectangle ,这很好。 但是 ,如果按照下面的代码添加ImageIcon对象(以供以后使用),则不会绘制矩形。 如果我调整窗口大小,它确实会出现。

一种解决方案是将setVisible(true)作为最后一行,或在构造函数上方实例化ImageIcon ,但我真的很想理解这一点。 对我来说,甚至不使用的物体也可能导致这种行为是没有意义的。 谢谢。

public class AJFrame extends JFrame {

    ImageIcon ii;

    public AJFrame() {
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);

        ImageIcon ii = new ImageIcon("Untitled.png");

        JPanel jp = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                g.fillRect(0, 0, 50, 50);
            }
        };

        add(jp);
    }

    public static void main(String[] args) {
        AJFrame jf = new AJFrame();
    }
}

框架内的所有动作均应在Swing的EDT(事件调度线程)中完成。 因此,正确的开始框架的方法是

java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new AJFrame().setVisible(true);
        }
});

因此,也许这一切都归结为帧的错误起点。

Java程序的主例程不在EDT中启动。 所有不在EDT中的Swing动作都可能产生奇怪的刷新/可见性问题。

这是完整的源代码:

public class AJFrame extends JFrame {

    ImageIcon ii;

    public AJFrame() {
        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        //setVisible(true);

        //ImageIcon ii = new ImageIcon("Untitled.png");
        JPanel jp = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                g.fillRect(0, 0, 50, 50);
            }
        };

        add(jp);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AJFrame().setVisible(true);
            }
        });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM