[英]An ImageIcon not even used is affecting my JFrame/JPanel. Why?
我希望這不是一個愚蠢的首要問題。 無論如何,我似乎都找不到答案。
我有這個JFrame
構造函數,其中將JPanel
添加到JFrame
。 JPanel
在JFrame
繪制一個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.