我已经开始对一个已经工作了几个月的项目进行扩展,我觉得有必要把它从控制台中取出,放在GUI窗口中。到目前为止一切都很顺利!除了一件事,当我试图测试登录按钮时(这只是为了限制谁使用它,看看我是否能做到。(动作监听器的反应并不像我希望的那样。这是代码:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import java.awt.Color;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JLayeredPane;
public class Main {
private JFrame frame;
private JTextField textField;
private JTextField textField_1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main window = new Main();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Main() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setForeground(Color.GREEN);
frame.setBounds(100, 100, 612, 389);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblUserName = new JLabel("User name");
lblUserName.setBackground(Color.YELLOW);
lblUserName.setBounds(158, 70, 67, 25);
frame.getContentPane().add(lblUserName);
JLabel lblPassword = new JLabel("Password");
lblPassword.setBounds(158, 146, 53, 14);
frame.getContentPane().add(lblPassword);
textField = new JTextField();
textField.setBounds(235, 143, 118, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setColumns(10);
textField_1.setBounds(235, 72, 118, 20);
frame.getContentPane().add(textField_1);
JButton btnLogin = new JButton("Login");
btnLogin.setBounds(151, 228, 256, 61);
frame.getContentPane().add(btnLogin);
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if(textField.equals("Admin"))
{
if(textField.equals("Admin"))
{
JLabel lblLoginSuccessPlease = new JLabel("LOGIN SUCCESS! Please wait while the other functions are loaded");
lblLoginSuccessPlease.setBounds(124, 204, 344, 14);
frame.getContentPane().add(lblLoginSuccessPlease);
}
}
}
});
JLabel lblWelcomeToMy = new JLabel("Welcome to my amazing program!");
lblWelcomeToMy.setBounds(174, 11, 242, 14);
frame.getContentPane().add(lblWelcomeToMy);
}
}
我试着使用&;测试用户名和密码框,结果都不起作用。此外,如果有人能指导我如何让密码框中的字符被屏蔽,那将非常有帮助。
if(textField.equals("Admin"))
{
if(textField.equals("Admin"))
{
JLabel lblLoginSuccessPlease = new JLabel("LOGIN SUCCESS! Please wait while the other functions are loaded");
lblLoginSuccessPlease.setBounds(124, 204, 344, 14);
frame.getContentPane().add(lblLoginSuccessPlease);
}
}
首先,不需要检查textField是否两次等于"Admin"。
但主要的问题是,文本字段(一个在UI中接受输入的白色矩形(永远等于字符串(一个字符序列(。
您要测试的是在文本字段中输入的文本是否等于"Admin":
if (textField.getText().equals("Admin"))
您的代码有其他问题:
- 使用绝对坐标而不是使用布局管理器
- 动态地将元素添加到框架中,而不是从一开始就添加它们,并在需要时简单地使它们可见。需要添加,但是GUI需要重新验证
frame
在Main
类中具有私有访问权限private JFrame frame;
将其更改为公共或删除修改器
要获取JTextfield的文本,请使用textfield.getText((
//if (textField.equals("Admin")) {wrong if (textField.getText().equals("Admin")) {//right way
你必须再次检查密码而不是用户名
if (textField_1.getText().equals("Admin")) { f (textField.getText().equals("Admin")) {//this is the password field
要屏蔽密码,你必须使用JPasswordField.so创建类似
private JPasswordField textField;
并像一样初始化
textField = new JPasswordField();
像一样检查
if (textField_1.getText().equals("Admin")) { if (String.valueOf(textField.getPassword()).equals("Admin")) { JLabel lblLoginSuccessPlease = new JLabel("LOGIN SUCCESS! Please wait while the other functions are loaded"); lblLoginSuccessPlease.setBounds(124, 204, 344, 14); frame.getContentPane().add(lblLoginSuccessPlease); } }