Java 切换JTextField可见性

Java 切换JTextField可见性,java,swing,jbutton,Java,Swing,Jbutton,我已经将JTextField可见性设置为false,当我单击一个按钮时,它应该立即显示,但直到我调整窗口大小时才显示 我正在使用包含三个文本字段(用户名、密码和确认密码)的Swing构建一个登录/“注册”应用程序(在我按下注册按钮之前,其可见性设置为false)。但文本字段在我调整窗口大小之前不会出现,我似乎无法找出问题所在。我使用了与另一个项目相同的“代码结构”,根本没有任何问题 您可以看到下面的代码: setTxtusername(new JTextField("Entrez usernam

我已经将
JTextField
可见性设置为
false
,当我单击一个按钮时,它应该立即显示,但直到我调整窗口大小时才显示

我正在使用包含三个文本字段(用户名、密码和确认密码)的Swing构建一个登录/“注册”应用程序(在我按下注册按钮之前,其可见性设置为false)。但文本字段在我调整窗口大小之前不会出现,我似乎无法找出问题所在。我使用了与另一个项目相同的“代码结构”,根本没有任何问题

您可以看到下面的代码:

setTxtusername(new JTextField("Entrez username",20));
getTxtusername().setVisible(true);
setTxtpassword(new JTextField("Entrez Password",20));
getTxtpassword().setVisible(true);
setTxtconfirmer(new JTextField("Confirmer Password",20));
getTxtconfirmer().setVisible(false);
setBtnlogin(new JButton("Login"));
getBtnlogin().setVisible(true);
getBtnlogin().addActionListener(l);
getBtnlogin().setActionCommand("login");
setBtnsignup(new JButton("Sign up"));
getBtnsignup().setVisible(true);
getBtnsignup().addActionListener(l);
getBtnsignup().setActionCommand("Signup");

//Hb is an horizontal box and Vb is a vertical one      

getHb2().add(btnlogin);
getHb2().add(btnsignup);
getHb2().add(warninglabel);
getHb2().setVisible(true);
getVb().add(txtusername);
getVb().add(txtpassword);
getVb().add(txtconfirmer);
getVb().add(hb2);
getVb().setVisible(true);
pnl.add(vb);
pnl.setVisible(true);
以下是
ActionListener

public class Listener implements ActionListener{


    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String action = e.getActionCommand().toString();
        switch(action){
        case "login":

            break;
        case "Signup":
            ConfirmerVisible(true, txtconfirmer);
            conteneur.revalidate();
            creationCompte();
            break;
        }
    }
    public void creationCompte() {
        if(getTxtconfirmer().getText().length() >=6 && getTxtpassword().getText() == getTxtconfirmer().getText()) {
            if(admin.isSelected()) {
                Utilisateur u = new Utilisateur(txtusername.getText(), getTxtpassword().getText(), 1);
                //Connexionuser.create(u);
                //Connexionuser.login(u)
            }
        }
    }

}
private void ConfirmerVisible(boolean b, Component c) {
    c.setVisible(b);
}
}
要刷新GUI,请使用:

revalidate();
repaint();

我猜一旦你做了“调整大小”它由JFrame自动触发,并递归触发子组件上的刷新。

这不是ActionListener。ActionListener是实现的对象。在UI建立之前,不要在父窗口上调用
setVisible
。如果UI已经可见,请调用
revalidate
repaint
在更改为触发新布局和绘制的容器上pass@MadProgrammer“重新验证”成功了!非常感谢!@VGR我复制粘贴了错误的代码行,我的动作侦听器是:公共类侦听器实现了动作侦听器{//Some code}将FlowLayout与CardLayout进行比较就像将苹果与橙子进行比较——它们是两种完全不同的动物,用于完全不同的事情。你问这个问题表明你根本不理解它们,这没关系,除非你不纠正这一点。你需要阅读关于这些布局的教程来理解@Andre是什么霍姆普森建议