2015-11-05 51 views
1

有一個奇怪的問題。我現在正在學習Java Swing,並且有一個設置大小的基本框架。我添加了按鈕,然後單選按鈕,一切都很好。我添加一個JTextField,並在Frame上的所有內容都空白,直到我手動調整它的大小,然後出現一切。我已經嘗試過使用Grids和GridBagConstraints搞亂了,沒有任何東西可以幫助,但是我還沒有很好的處理這些問題。我相信所有的尺寸都是正確的,但是盒子打開空白,然後當我改變尺寸甚至在任何方向上通過單個像素時,一切都顯示正常。Swing ...添加JTextField空白我的JPanel

這是到目前爲止我的代碼:

import javax.swing.*; 

import java.awt.*; 

public class Test { 

    private JFrame f; //frame 
    private JPanel p; //window 
    private JButton b1; //button 
    private JButton b2; //button 
    private JButton b3; //button 
    private JButton b4; //button 
    private JRadioButton rad1; 
    private JRadioButton rad2; 
    private String radBut1 = "Checking"; 
    private String radBut2 = "Savings"; 
    private JTextField textField; 


public Test(){ 

    gui(); 

} 

public void gui(){  

    f = new JFrame("ATM Machine"); 
    f.setVisible(true); 
    f.setSize(350,200); 
    f.setLocationRelativeTo(null); 
    //f.setResizable(false); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    p = new JPanel(); 

    b1 = new JButton("Withdraw From"); 
    b2 = new JButton("Deposit To"); 
    b3 = new JButton("Transfer To"); 
    b4 = new JButton("Balance Of"); 

    b1.setPreferredSize(new Dimension(150,25)); 
    b2.setPreferredSize(new Dimension(150,25)); 
    b3.setPreferredSize(new Dimension(150,25)); 
    b4.setPreferredSize(new Dimension(150,25)); 

    p.add(b1); 
    p.add(b2); 
    p.add(b3); 
    p.add(b4); 

    rad1 = new JRadioButton(radBut1); 
    rad2 = new JRadioButton(radBut2); 






    ButtonGroup radioGroup = new ButtonGroup(); 
    radioGroup.add(rad1); 
    radioGroup.add(rad2); 

    p.add(rad1); 
    p.add(rad2); 

    textField = new JTextField(25); 

    p.add(textField); 


    f.add(p); 




} 

public static void main(String[] args) { 

    new Test(); 


} 

} 

所以基本上它需要看起來像在上面2個按鈕,2個按鈕這些按鈕的下面,在那2個單選按鈕,然後最後文本字段無線電下鈕釦。

我將不勝感激任何幫助。

謝謝!

+1

調用'f.setVisible(true);'只有當您完成主UI設置後 – MadProgrammer

+0

解決了它,謝謝!我觀看了一些YouTube視頻以瞭解這一點,但他們都沒有這樣做。猜猜我會更加小心我的資源。謝謝! – bnr32jason

回答

2

在使框架可見之前,應將組件添加到框架中。

f = new JFrame("ATM Machine"); 
//f.setVisible(true); 
... 
f.add(p); 
f.setVisible(true); 

,並具有與一組大小的基本幀。

不要設置幀的大小。讓Swing確定每個組件的大小和框架的大小。所以真的代碼應該是:

f.add(p); 
f.pack(); 
f.setVisible(true); 

不要設置按鈕的preferredSize()。如果你希望所有的按鈕是相同的大小,然後使用一個單獨的面板上的網格佈局:

JPanel buttons = new JPanel(new GridLayout(0, 4)); 
buttons.add(b1); 
buttons.add(b2); 
... 

然後你的按鈕面板添加到該幀。

此外,您需要更改佈局管理器。現在您正在使用FlowLayout,並且佈局只顯示正常工作。如果您調整框架組件將流向另一條線。也許你需要使用BoxLayout

閱讀關於Using Layout Manager的Swing教程以獲取更多信息。

+0

但是,當我使用f.pack方法而不是我的尺寸設置時,框架只是排成一行,將所有組件並排放置。所以我使用p.SetLayout來創建一個新的網格佈局,然後忽略我的按鈕大小(setPrefferedSize),並使它們佔據整個框架。 – bnr32jason

+0

您沒有正確使用佈局管理器 - 我在編輯答案以提供更多信息。 – camickr

+0

好的,我會努力的,謝謝! – bnr32jason