2016-01-20 44 views
1

我正在學習Java中的GUI。 我在這裏有點困惑。當我像這樣放置window.setVisible(true);時,如果我調整它的大小,我只會看到JMenuBar(它不會在沒有某種交互的情況下顯示)。JMenuBar知名度混淆

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 

public class Main { 

    public static void main(String[] args) { 

     JFrame window = new JFrame("My App"); 
     window.setSize(500, 500); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setVisible(true); 
     JMenuBar bar = new JMenuBar(); 
     window.setJMenuBar(bar); 
     JMenu menu = new JMenu("File"); 
     bar.add(menu); 

    } 

} 

但是,當我把它放在最底部,它顯示爲預期。爲什麼是這樣?

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 

public class Main { 

    public static void main(String[] args) { 

     JFrame window = new JFrame("My App"); 
     window.setSize(500, 500); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JMenuBar bar = new JMenuBar(); 
     window.setJMenuBar(bar); 
     JMenu menu = new JMenu("File"); 
     bar.add(menu); 
     window.setVisible(true); 

    } 

} 

這裏解釋說它必須在最後被調用,但是這背後的推理是什麼?

java JMenuBar not visible?Why?

回答

1

添加一個組件後,你將不得不重新繪製容器。 因此,如果您在窗口可見後添加菜單欄,則會在調整大小後,在您的示例中重新繪製後再彈出。如果菜單欄添加之前的設置窗口是可見的,它將在第一張圖中繪製。

這是Swing組件的常見行爲。

Component javadoc

如果您添加或刪除組件:

如果集裝箱已經顯示,分層結構必須是 爲了顯示所添加的分量之後驗證。

+0

這很有道理,謝謝! – ak1652