Witam. Tworząc projekt postanowiłem podzielić go na części. Jedną z nich jest logowanie. Co należałoby w nim poprawić?
Klasa Main:
package classes;
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application {
// Obejcts from other classes
Login Logging_session = new Login();
// Starting Parameters
@Override
public void start(Stage primaryStage) {
Logging_session.Display();
primaryStage.setScene(Logging_session.login_window.scene);
primaryStage.setTitle("Logging Session");
primaryStage.show();
}
// Main Fuction
public static void main(String[] args) {
launch(args);
}
}
Klasa Login:
package classes;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;
// The class responsible for the login function
public class Login {
// Objects from other Classes
MySql sql_login = new MySql();
Window login_window = new Window(1,400,200,5,5,"Logging_session");
// Buttons
Button sign = new Button();
// TextFields and PasswordFields
TextField username = new TextField();
PasswordField pass = new PasswordField();
// Texts and Labels
Text username_text = new Text("Username");
Text password_text = new Text("Password");
// Showing the login window
public void Display(){
login_window.Set();
login_window.layout_grid.setAlignment(Pos.CENTER);
login_window.layout_grid.add(username_text, 0,0);
login_window.layout_grid.add(username, 1,0);
login_window.layout_grid.add(password_text, 0,1);
login_window.layout_grid.add(pass, 1,1);
login_window.layout_grid.add(sign, 1,2);
if(sql_login.Get_Int("SELECT ID FROM users") == 0) {
Sign_up();
}
else {
Sign_in();
}
}
// Sign up action
public void Sign_up () {
sign.setText("Sign up");
sign.setOnAction(e -> {
sql_login.Registarion("INSERT INTO users (username, password) VALUES (?,?)", username.getText(),pass.getText());
});
Get_Acces(1);
}
// Sign in action
public void Sign_in (){
sign.setText("Sign in");
sign.setOnAction(e -> {
if(username.getText().equals(sql_login.Get_String("SELECT username FROM users WHERE ID = 1")) && pass.getText().equals(sql_login.Get_String("SELECT password FROM users WHERE ID = 1"))){
Get_Acces(1);
}
else {
Get_Acces(0);
}
});
}
// Acces for Logging Session
public Integer Get_Acces(Integer acces){
return acces;
}
}
Klasa Window:
package classes;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
// The class responsible for the window and scene
public class Window extends Stage {
// Window Parametres
Scene scene;
int number, MinSize1, MinSize2, Vgap, Hgap;
String title;
GridPane layout_grid = new GridPane();
// Constructor
Window (int Number_layout, int MinSize01, int MineSize02, int V, int H, String name){
number = Number_layout;
MinSize1 = MinSize01;
MinSize2 = MineSize02;
Vgap = V;
Hgap = H;
title = name;
}
// Setting window parametres
public void Set(){
switch (number){
case 1:
scene = new Scene(layout_grid);
layout_grid.setMinSize(MinSize1,MinSize2);
layout_grid.setVgap(Vgap);
layout_grid.setHgap(Hgap);
break;
}
}
}
Klasa MySql:
package classes;
import java.sql.*;
// The class responsible for writing and reading from the database
public class MySql
{
// Variables
private Connection conn;
private String url, userName, password_base;
public MySql()
{
url = "jdbc:mysql://localhost/invoices?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Warsaw" ;
userName = "root";
password_base = "123";
}
// Connecting to the database
public String connect()
{
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
}
catch (InstantiationException e) {
e.printStackTrace();
return "error";
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(url, userName, password_base);
}
catch (SQLException e) {
e.printStackTrace();
return e.toString();
}
return "Connected successfully";
}
// Disconnecting from the database
public void disconnect()
{
try{
conn.close();
} catch (SQLException e) {
System.err.println(e.toString());
}
}
// Getting Strings from the Database
public String Get_String(String query)
{
connect();
Statement statement;
ResultSet rs;
String result="";
try {
statement = conn.createStatement();
rs = statement.executeQuery(query);
rs.next();
result = rs.getString(1);
} catch (SQLException e) {
System.err.println(e.toString());
return e.toString();
}
disconnect();
return result;
}
// Getting Integers from the Database
public Integer Get_Int(String query)
{
connect();
Statement statement;
ResultSet rs;
int result = 0;
try {
statement = conn.createStatement();
rs = statement.executeQuery(query);
rs.next();
result = rs.getInt(1);
} catch (SQLException e) {
System.err.println(e.toString());
}
disconnect();
return result;
}
// Registration a user in the database
public void Registarion(String query, String first, String second)
{
connect();
PreparedStatement prstatement;
try {
prstatement = conn.prepareStatement(query);
prstatement.setString(1, first);
prstatement.setString(2, second);
prstatement.executeUpdate();
} catch (SQLException e) {
System.err.println(e.toString());
}
disconnect();
}
}
Dodam tylko, że Switch w funkcji Set() w klasie Window, będzie rozwijany wtedy, gdy będzie potrzeba stworzenia innego rodzaju okna.