[英]Java JFrame is displayed incorrectly
當我運行程序時, JFrame
顯示JFrame
,然后顯示JFrame
打開后的內容。
public class ChuckysAdventure extends JFrame { // Main Class
public ChuckysAdventure(){
setTitle("Chuckys Adventure");
setSize(700, 700);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint (Graphics g){
g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
public static void main(String[] args){ // Starts game
new ChuckysAdventure();
}
歡迎來到“親愛的,我打破了油漆鏈”的美好世界...
Swing中的繪畫由一系列鏈接在一起的方法調用組成,這些方法調用一起工作以產生最終結果,其中一個方法實際上用組件的背景色填充了Graphics
上下文。
不遵守該油漆鏈將不會導致油漆偽影的終結。 Graphics
是共享資源,這意味着在給定繪制周期內繪制的所有內容都將使用Graphics
上下文的相同實例。 如果您無法確保油漆鏈正確完成,則最終會遇到許多令人敬畏的油漆偽影。
您最初的解決方法是更改...
public void paint (Graphics g){
g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
至...
public void paint (Graphics g){
super.paint(g);
g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
你未來的解決將是避免壓倒一切的paint
頂層容器一樣的JFrame
從事實的一部分,它不是雙緩沖和繪畫將發生幀裝飾下,它的所有容易完全搞砸了烤漆工藝
相反,您應該使用JPanel
之類的東西,並改寫它的paintComponent
方法
看一下在AWT和Swing中執行自定義繪畫和繪畫以獲取更多詳細信息
我用了這樣的東西:
public class gui {
public static void main(String args[]) {
JFrame tobi = new JFrame("youwillneverfigurethisout");
tobi.setVisible(true);
tobi.setTitle("Xbatz GUI Example");
tobi.setSize(400, 200);
tobi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
而且效果很好。 也許嘗試將事物的順序更改為我所擁有的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.