2015-11-05 55 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