• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pierwsze kroki z Java oraz JavaFX

VPS Starter Arubacloud
0 głosów
362 wizyt
pytanie zadane 28 sierpnia 2020 w Java przez Kacper Sas Dyskutant (8,460 p.)

Poznając Jave stwierdziłem, że dobrym pomysłem byłoby również liźnięcie JavaFX. Na start zacząłem od małego projektu, okienka logowania ze sprawdzeniem danych, które mieszczą się w .txt

 

Klasa MainWindow: (ew. pastebin)

package sas.kacper.itemsapp;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.xml.bind.DatatypeConverter;

import javafx.application.Application;

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.PasswordField;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.scene.Node;
import javafx.scene.text.Text;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

import javafx.stage.Stage;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;

import javafx.geometry.Pos;

import sas.kacper.itemsapp.LoginAuthenticator;

public class MainWindow extends Application {
	
	@Override
	public void start(Stage primaryStage) {
		
		VBox mainPane = new VBox(10);
		
		Image iLogo = new Image("file:java.png", true);
		ImageView ivLogo = new ImageView();
		ivLogo.setImage(iLogo);
		
		Text lText = new Text("Nazwa użytkownika");
		Text pText = new Text("Hasło");
		TextField lField = new TextField();
		PasswordField pField = new PasswordField();
		Button bLogin = new Button("Log In!");
		
		bLogin.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent e) {
				String userLogin="", userHash="";
				userLogin = lField.getText();
				
				try {
					MessageDigest crypt = MessageDigest.getInstance("MD5");
					crypt.update((pField.getText()).getBytes());
					userHash = (DatatypeConverter.printHexBinary(crypt.digest())).toLowerCase();
				} catch(NoSuchAlgorithmException exc) {
					exc.printStackTrace();
				}
				
				Alert aAlert = new Alert(AlertType.INFORMATION);
				((Stage)aAlert.getDialogPane().getScene().getWindow()).getIcons().add(new Image("file:java.png"));
				aAlert.setContentText("Wszystko ok!");
				aAlert.setTitle("Zalogowany!");
				
				if(!(LoginAuthenticator.checkLogin(userLogin, userHash))) {
					aAlert.setAlertType(AlertType.ERROR);
					aAlert.setContentText("Coś poszło nie tak!");
					aAlert.setTitle("Błąd");
				}
				
				aAlert.setHeaderText(null);
				aAlert.showAndWait();
				
			}
		});
		
		lField.setMaxWidth(250);
		pField.setMaxWidth(250);
		lField.setAlignment(Pos.CENTER);
		pField.setAlignment(Pos.CENTER);
		
		mainPane.setAlignment(Pos.CENTER);
		mainPane.setStyle("-fx-background-color: #FFFFFF;");
		mainPane.getChildren().addAll(ivLogo, new Text(), new Text(), lText, lField, pText, pField, new Text(), bLogin);
		
		Scene mainScene = new Scene(mainPane, 450, 600);
		
		primaryStage.setTitle("Log In!");
		primaryStage.setResizable(false);
		primaryStage.setScene(mainScene);
		primaryStage.getIcons().add(new Image("file:java.png")); 
		primaryStage.show();
		
	}
	
	public static void main(String ... args) {
		launch(args);
	}

}

Klasa LoginAuthenticator: (ew. pastebin)

package sas.kacper.itemsapp;

import java.lang.String;

import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileNotFoundException;

public class LoginAuthenticator {
	
	public static Boolean checkLogin(String Login, String hashPass) {
		
		BufferedReader strFile = null;
		
		try {
			strFile = new BufferedReader(new FileReader("input.txt"));
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		}
		
		String sLine = null;
		
		try {
			while((sLine = strFile.readLine()) != null) {
				String[] data = sLine.split(":");
				if(data[0].equals(Login)) {
					if(data[1].equals(hashPass)) {
						return true;
					}
				}
			}
		} catch(IOException e) {
			e.printStackTrace();
		}
		
		return false;
		
	}

}

Mam parę wątpliwości. Czy nie lepiej byłoby pozostawić w klasie MainWindow tylko i wyłącznie kod związany z widokiem? Może zamiast działać na klasie LoginAuthenticator to utworzyć obiekt, konstruktorem podesłać dane, potem wywołać metodę checkLogin i również z niej informować o rezultacie?

Jak to na początki przystało, MainWindow razi po oczach bałaganem. Jakieś wskazówki? Na co zwracać uwagę, czego nie robić? Za wszystkie podpowiedzi byłbym wdzięczny. Pozdrawiam.

1
komentarz 2 września 2020 przez sefir Dyskutant (8,560 p.)
Możesz poszukać coś o JavaFX MVC. Ja do tego widoki w SceneBuilderze robiłem, programowalnie robienie widoku to strasznie dużo kodu i czytelność się traci, że nie chciało mi się później na to patrzeć.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 175 wizyt
pytanie zadane 27 lipca 2022 w Java przez michal441599 Użytkownik (530 p.)
0 głosów
2 odpowiedzi 134 wizyt
pytanie zadane 13 marca 2023 w Java przez elvis Nowicjusz (210 p.)
0 głosów
1 odpowiedź 1,104 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...