簡體   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