Java 双击JButton中执行ActionEvent所需的
我使用JFrame创建了一个简单的登录帧。 我有硬编码验证,其中如果用户以AKASH身份输入用户名,以12345身份输入密码,则按钮下方会显示登录成功,否则会显示错误密码 一切正常。唯一的问题是: 输入详细信息后,我必须双击查看结果 谁能帮我一下吗 这是我的密码:Java 双击JButton中执行ActionEvent所需的,java,swing,jframe,actionlistener,Java,Swing,Jframe,Actionlistener,我使用JFrame创建了一个简单的登录帧。 我有硬编码验证,其中如果用户以AKASH身份输入用户名,以12345身份输入密码,则按钮下方会显示登录成功,否则会显示错误密码 一切正常。唯一的问题是: 输入详细信息后,我必须双击查看结果 谁能帮我一下吗 这是我的密码: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; pu
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);
}
else {
jl3.setBounds(100, 230, 150, 40);
jl3.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 12));
c.add(jl3);
c.remove(jl4);
}
}
}
}
我想在面板中添加/删除组件后,您需要调用面板的repaint()
这只是猜测,因为您不应该使用空布局。Swing设计用于布局管理器。让布局管理器根据布局管理器的规则确定零部件的大小/位置
然后,当您从面板添加/删除组件时,基本逻辑是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
有关详细信息,请阅读上的Swing教程
注:
我还建议一个更简单的解决方案是在面板中添加“消息标签”,并将文本设置为“”。然后,您可以简单地使用标签的
setText(…)
方法来更改消息。这样你甚至不必担心添加/删除组件。是的,这很有效。但是你能详细说明一下这里需要的repaint()的概念吗?每当你更改组件的属性时,组件都需要重新绘制。通常,当您更改Swing组件时,组件将自动重新验证()本身并重新绘制(),因此您无需执行任何特殊操作。然而。面板是不同的。从面板添加/删除组件时,面板不知道何时完成,并且不希望继续调用布局管理器,因此需要执行重新验证()和重新绘制()在您完成对面板的所有更改后手动操作。很抱歉,我是StackOverflow的新手,对upvote没有太大的声誉。我为您@camickr进行了upvote操作,以获得良好的解释。:)
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();