2016-02-06 40 views
0

我想提出的是有3個按鈕的JFrame的菜單正常顯示,但開始的JButton不是JFrame中

這裏的時候,按鈕無法正確顯示是我的代碼:

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class MainMenu { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("Nakib Group Managment System"); 
     frame.setSize(500, 200); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     JButton addRequest = new JButton("Add request"); 
     addRequest.addActionListener(new AddRequest()); 
     JButton viewRequests = new JButton("View requests"); 
     viewRequests.addActionListener(new ViewRequests()); 
     JButton addCab = new JButton("Add a cab"); 
     addCab.addActionListener(new AddCab()); 
     panel.add(addRequest); 
     panel.add(viewRequests); 
     panel.add(addCab); 
     frame.add(panel); 
    } 
} 

當我運行這個它會告訴我下面的(不能發佈圖片,因爲沒有足夠的聲譽): first run

然而,當我調整窗口大小的按鈕,將顯示: resized

我的操作系統環境是Windows 10,我正在研究Java。

+0

是的,我只是注意到,只是修復它 –

回答

2

問題在於,在將組件添加到組件之前,將組件框架設置爲可見,導致組件層次結構無效。從the docs for the add method開始:

如果容器已顯示,則必須在此後對層次結構進行驗證,以顯示添加的組件。

要解決此問題,在添加panel後,應該將行frame.setVisible(true)移動到末尾。或者,您也可以在最後撥打revalidaterepaint來強制更新和重新繪製。

現在它只在調整大小後才起作用,因爲它強制它再次放下所有東西,並正確更新組件層次結構。