我使用 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(...)标签的方法来改变消息。这样您甚至无需担心添加/删除组件。
添加回答
举报
0/150
提交
取消