为了账号安全,请及时绑定邮箱和手机立即绑定

在 JButton 中执行 ActionEvent 需要双击

在 JButton 中执行 ActionEvent 需要双击

不负相思意 2021-10-17 15:34:33
我使用 JFrame 创建了一个简单的登录框架。我有硬编码验证,其中如果用户输入用户名作为AKASH和密码作为12345然后登录成功显示在按钮下方,否则显示错误密码。一切正常。唯一的事情是:输入详细信息后,我必须双击才能看到结果任何人都可以帮我解决这个问题。这是我的代码:import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class LginForm extends JFrame implements ActionListener{    Container c;    JTextField jt;    JButton jb;    JPasswordField jp;    JLabel jl1,jl2;    JLabel jl3 = new JLabel("Wrong Password");    JLabel jl4 = new JLabel("Login Successful");    public static void main(String[] args) {        LginForm lf = new LginForm();        lf.setBounds(100, 50, 500, 400);        lf.setVisible(true);        lf.setDefaultCloseOperation(EXIT_ON_CLOSE);    }    public LginForm() {        c = this.getContentPane();        c.setBackground(Color.yellow);        c.setLayout(null);        jl1 = new JLabel("Enter Username");        jl1.setBounds(50, 10, 100, 30);        jl1.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 12));        jl2 = new JLabel("Enter Password");        jl2.setBounds(50, 100, 100, 30);        jl2.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 12));        jt = new JTextField();        jt.setBounds(200,10,100,30);        jp = new JPasswordField();        jp.setBounds(200,100,100,30);        jb = new JButton("login");        jb.setBounds(130,180,80,30);        c.add(jl1);        c.add(jl2);        c.add(jt);        c.add(jp);        c.add(jb);        jb.addActionListener(this);    }    @Override    public void actionPerformed(ActionEvent event) {        if(event.getSource() == jb) {            String usrname = jt.getText();            String passwrd = String.valueOf(jp.getPassword());            if(usrname.equals("Akash") && passwrd.equals("12345")) {                jl4.setBounds(100, 230, 150, 40);                jl4.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 12));                c.add(jl4);                c.remove(jl3);            }
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

c.add(jl4);

c.remove(jl3);

我猜想在从面板添加/删除组件后,您需要调用repaint()面板。


这只是一个猜测,因为您不应该使用空布局。Swing 旨在与布局管理器一起使用。让布局管理器根据布局管理器的规则确定组件的大小/位置。


然后,当您从面板中添加/删除组件时,基本逻辑将是:


panel.remove(...);

panel.add(...);

panel.revalidate();

panel.repaint();

阅读有关使用布局管理器的 Swing 教程以获取更多信息。


笔记:

我还建议一个更简单的解决方案是将“消息标签”添加到面板,并将文本设置为“”。然后你可以简单地使用setText(...)标签的方法来改变消息。这样您甚至无需担心添加/删除组件。


查看完整回答
反对 回复 2021-10-17
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信