我使用 JFrame 創(chuàng)建了一個簡單的登錄框架。我有硬編碼驗證,其中如果用戶輸入用戶名作為AKASH和密碼作為12345然后登錄成功顯示在按鈕下方,否則顯示錯誤密碼。一切正常。唯一的事情是:輸入詳細信息后,我必須雙擊才能看到結(jié)果任何人都可以幫我解決這個問題。這是我的代碼: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條經(jīng)驗 獲得超9個贊
c.add(jl4);
c.remove(jl3);
我猜想在從面板添加/刪除組件后,您需要調(diào)用repaint()面板。
這只是一個猜測,因為您不應(yīng)該使用空布局。Swing 旨在與布局管理器一起使用。讓布局管理器根據(jù)布局管理器的規(guī)則確定組件的大小/位置。
然后,當您從面板中添加/刪除組件時,基本邏輯將是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
閱讀有關(guān)使用布局管理器的 Swing 教程以獲取更多信息。
筆記:
我還建議一個更簡單的解決方案是將“消息標簽”添加到面板,并將文本設(shè)置為“”。然后你可以簡單地使用setText(...)標簽的方法來改變消息。這樣您甚至無需擔心添加/刪除組件。
添加回答
舉報
0/150
提交
取消