有时它显示面板的组件,有时甚至不显示面板

时间:2013-06-20 16:52:46

标签: java swing frame jtextfield jcomponent

我在这里制作了一个非常基本的应用程序,我已经编写了几次更复杂的gui应用程序,但由于某种原因我有一个错误,有时显示其组件的面板,有时面板甚至没有显示在帧。

Panel由两个基本组件组成:1个按钮和1个Jtextfield。按钮有时显示,Jtextfield甚至不显示?

我正在使用GridBagLayout。以下是非常简单的代码:

public class Start extends JFrame implements ActionListener{

public static HomeList home;
public static String user = "default";
public GridBagConstraints c = new GridBagConstraints();

public Start(){

    super("title");
    this.pack();
    this.setSize(800, 500); // w h
    this.setBackground(Color.DARK_GRAY);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    this.setVisible(true);

    JPanel pane = new JPanel();
    pane.setLayout(new GridBagLayout());
    pane.setPreferredSize(new Dimension(300, 100));
    pane.setBackground(Color.BLUE);
    this.getContentPane().add(pane, BorderLayout.CENTER);


        JButton button = new JButton("Enter");
        button.setActionCommand("login");
        button.addActionListener(this);
        c.gridx = 0;
        c.gridy = 0;
        pane.add(button,c);

        JTextField text = new JTextField(20);
        text.setVisible(true);
        c.gridx = 1;
        c.gridy = 0;
        pane.add(text,c);


}

public static void main(String[] args) {

    new Start();
}

@Override
public void actionPerformed(ActionEvent ae) {

    if("login".equalsIgnoreCase(ae.getActionCommand())){
        this.dispose();
        home = new HomeList(user);
    }
}


}

3 个答案:

答案 0 :(得分:3)

问题是您在向jframe添加组件之前使用setVisible(true)

答案 1 :(得分:1)

在构造函数的末尾移动this.setVisible(true);

组件构建后应该可见。

答案 2 :(得分:0)

在框架中添加内容时,也许应该尝试使用this.update()方法。