Java GUI登录屏幕
我已经为我的Java GUI程序创建了一个登录屏幕,单击按钮上的登录屏幕将检查在文本字段中输入的用户名和密码是否与文本文件中的行相等,如果相等,则允许用户移动到下一屏幕,如果不是Java GUI登录屏幕,java,swing,login,Java,Swing,Login,我已经为我的Java GUI程序创建了一个登录屏幕,单击按钮上的登录屏幕将检查在文本字段中输入的用户名和密码是否与文本文件中的行相等,如果相等,则允许用户移动到下一屏幕,如果不是JOptionPane。将显示showMessageDialog。我还有另一个屏幕,允许用户写入插入新用户名和密码的文件 对,所以我的问题是它只读取最后2行代码,所以我只能用最后创建的用户名和密码登录。如何让它读取每一行来检查用户名和密码 主登录屏幕 import javax.swing.*; import java.a
JOptionPane。将显示showMessageDialog
。我还有另一个屏幕,允许用户写入插入新用户名和密码的文件
对,所以我的问题是它只读取最后2行代码,所以我只能用最后创建的用户名和密码登录。如何让它读取每一行来检查用户名和密码
主登录屏幕
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class login extends JFrame {
JButton blogin;
JPanel loginpanel;
JTextField txuser;
JTextField pass;
JButton newUSer;
JLabel username;
JLabel password;
public login(){
super("Login Autentification");
blogin = new JButton("Login");
loginpanel = new JPanel();
txuser = new JTextField(15);
pass = new JPasswordField(15);
newUSer = new JButton("New User?");
username = new JLabel("User - ");
password = new JLabel("Pass - ");
setSize(300,200);
setLocation(500,280);
loginpanel.setLayout (null);
txuser.setBounds(70,30,150,20);
pass.setBounds(70,65,150,20);
blogin.setBounds(110,100,80,20);
newUSer.setBounds(110,135,80,20);
username.setBounds(20,28,80,20);
password.setBounds(20,63,80,20);
loginpanel.add(blogin);
loginpanel.add(txuser);
loginpanel.add(pass);
loginpanel.add(newUSer);
loginpanel.add(username);
loginpanel.add(password);
getContentPane().add(loginpanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
Writer writer = null;
File check = new File("userPass.txt");
if(check.exists()){
//Checks if the file exists. will not add anything if the file does exist.
}else{
try{
File texting = new File("userPass.txt");
writer = new BufferedWriter(new FileWriter(texting));
writer.write("message");
}catch(IOException e){
e.printStackTrace();
}
}
blogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File file = new File("userPass.txt");
Scanner scan = new Scanner(file);;
String line = null;
FileWriter filewrite = new FileWriter(file, true);
String usertxt = " ";
String passtxt = " ";
String puname = txuser.getText();
String ppaswd = pass.getText();
while (scan.hasNext()) {
usertxt = scan.nextLine();
passtxt = scan.nextLine();
}
if(puname.equals(usertxt) && ppaswd.equals(passtxt)) {
MainMenu menu =new MainMenu();
dispose();
}
else if(puname.equals("") && ppaswd.equals("")){
JOptionPane.showMessageDialog(null,"Please insert Username and Password");
}
else {
JOptionPane.showMessageDialog(null,"Wrong Username / Password");
txuser.setText("");
pass.setText("");
txuser.requestFocus();
}
} catch (IOException d) {
d.printStackTrace();
}
}
});
newUSer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
NewUser user = new NewUser();
dispose();
}
});
}
}
和新用户文件
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class NewUser extends JFrame {
JButton create;
JPanel newUserPanel;
JTextField txuserer;
JTextField passer;
public NewUser(){
super("Registration");
create = new JButton("Create");
newUserPanel = new JPanel();
txuserer = new JTextField(15);
passer = new JPasswordField(15);
setSize(300,200);
setLocation(500,280);
newUserPanel.setLayout (null);
txuserer.setBounds(70,30,150,20);
passer.setBounds(70,65,150,20);
create.setBounds(110,100,80,20);
newUserPanel.add(create);
newUserPanel.add(txuserer);
newUserPanel.add(passer);
getContentPane().add(newUserPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
Writer writer = null;
File check = new File("userPass.txt");
if(check.exists()){
//Checks if the file exists. will not add anything if the file does exist.
}else{
try{
File texting = new File("userPass.txt");
writer = new BufferedWriter(new FileWriter(texting));
writer.write("message");
}catch(IOException e){
e.printStackTrace();
}
}
create.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
File file = new File("userPass.txt");
Scanner scan = new Scanner(file);;
FileWriter filewrite = new FileWriter(file, true);
String usertxter = " ";
String passtxter = " ";
String punamer = txuserer.getText();
String ppaswder = passer.getText();
while (scan.hasNext()) {
usertxter = scan.nextLine();
passtxter = scan.nextLine();
}
if(punamer.equals(usertxter) && ppaswder.equals(passtxter)) {
JOptionPane.showMessageDialog(null,"Username is already in use");
txuserer.setText("");
passer.setText("");
txuserer.requestFocus();
}
else if(punamer.equals("") && ppaswder.equals("")){
JOptionPane.showMessageDialog(null,"Please insert Username and Password");
}
else {
filewrite.write(punamer+"\r\n" +ppaswder+ "\r\n");
filewrite.close();
JOptionPane.showMessageDialog(null,"Account has been created.");
dispose();
login log = new login();
}
} catch (IOException d) {
d.printStackTrace();
}
}
});
}
}
这:
需要深入了解这一点:
while (scan.hasNext()) {
usertxt = scan.nextLine();
passtxt = scan.nextLine();
}
使用while循环在文件中循环,但仅在while循环结束后测试字符串的相等性。当您发现时,这将不起作用。不相关的问题:
.setLayout(null)代码>和设定边界(20,28,80,20)代码>--您不想这样做。真的吗?不用担心,一旦我解决了第一个问题,我会努力解决的。(Y) 避免使用null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing旨在与核心布局管理器一起工作,丢弃这些将导致无休止的问题,您将花费越来越多的时间试图纠正这些问题。我如何添加弹出屏幕,指出用户名/密码不正确,我也尝试过将其插入循环,但它所做的只是打开下一个屏幕,然后再打开弹出窗口3次。方法很多。如果if块为true,可以设置一个布尔变量,然后在循环结束后检查它。你应该能弄明白这一点。
while (scan.hasNext()) {
usertxt = scan.nextLine();
passtxt = scan.nextLine();
}