public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name;

Podobne dokumenty
Programowanie i projektowanie obiektowe

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Zaawansowane aplikacje WWW - laboratorium

Metody Metody, parametry, zwracanie wartości

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Programowanie obiektowe i zdarzeniowe

Laboratorium 8 Diagramy aktywności

Diagram stanów Laboratorium 9

JavaFX. Zaawansowane technologie Javy 2019

Programowanie obiektowe

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Programowanie obiektowe

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Java: interfejsy i klasy wewnętrzne

Android pierwsza aplikacja

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Programowanie obiektowe i zdarzeniowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Java. Programowanie Obiektowe Mateusz Cicheński

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie obiektowe

Programowanie w języku Java. Bazy danych SQLite w Javie

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Programowanie w Javie wykład 8 Interfejsy

Algorytmy z powrotami. Algorytm minimax

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Klasy i obiekty cz II

Klasy abstrakcyjne, interfejsy i polimorfizm

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Kurs programowania. Wykład 9. Wojciech Macyna

Dokumentacja do API Javy.

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Platformy Programistyczne Podstawy języka Java

Podstawy Programowania

Przypomnienie o klasach i obiektach

Podejście obiektowe. Tablice (1) obiektów

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Programowanie w Javie - wykład 3

WayBillsWebService. identyfikator kontrahenta, jeśli wartość zwracana jest mniejsza od zera to numer błędu.

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Programowanie obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Aplikacje w Javie wykład 5 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Interfejsy

Programowanie obiektowe

Programowanie współbieżne Laboratorium nr 11

JavaFX. Programowanie Obiektowe Mateusz Cicheński

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Podstawy programowania obiektowego

Laboratorium Programowania Kart Elektronicznych

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Systemy operacyjne na platformach mobilnych

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Wykład 7: Pakiety i Interfejsy

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Języki i metody programowania Java Lab2 podejście obiektowe

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Programowanie obiektowe i zdarzeniowe

Wykład 4: Klasy i Metody

Przykład -

Programowanie obiektowe

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Polimorfizm. dr Jarosław Skaruz

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

W powyższym kodzie utworzono wyliczenie dni tygodnia.

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Iteracyjno-rozwojowy cykl oprogramowania cykl 2. Java Zofia Kruczkiewicz 1

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

1 Intefejsy graczne. 1.1 Okienka. 1.2 Komponenty

Programowanie w technologii.net wykład 4 Aplikacja i okna

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

1. Co można powiedzieć o poniższym kodzie?

Git, Bitbucket, IntelliJ IDEA

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Współbieżność w środowisku Java

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

akademia androida Składowanie danych część VI

Transkrypt:

1 Ćwiczenie Zbudować okienko logowania do systemu. Okienko zawiera: (1) listę wyboru z możliwością wyboru środowiska: produkcyjnego, testowego, deweloperskiego, (2) listy wyboru identyfikatora użytkownika z możliwością edycji, (3) pola edycji na wprowadzenia hasła, (4) przycisków OK i Anuluj.

2 public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name; Environment(String name) { this.name = name; @Override public String tostring() { return name;

3 public class UsersDB { static UsersDB usrinstance; public static UsersDB getinstance() { if (usrinstance == null) usrinstance = new UsersDB(); return usrinstance; private UsersDB() { users = new HashMap<Environment, HashMap<String, String>>(); readusers(); private HashMap<Environment, HashMap<String, String> > users; public ArrayList<String> getusers(environment env) { return new ArrayList<String>(users.get(env).keySet()); public boolean ispasscorrect(environment env, String userid, String pass) { String dbpass = users.get(env).get(userid); if (dbpass == null) return false; return dbpass.equals(pass);

4 //class UsersDB cont. private void readusers() { HashMap<String,String> devusers = new HashMap<String, String>(); devusers.put("adam.klatkowski", "123456789"); devusers.put("maria.ciekawa", "123456789"); devusers.put("ryszard.gozdek", "123456789"); users.put(environment.development, devusers); HashMap<String,String> testusers = new HashMap<String, String>(); testusers.put("ewa.cudna", "123456789"); testusers.put("adam.nowak", "123456789"); testusers.put("jan.kowalski", "123456789"); users.put(environment.test, testusers); HashMap<String, String> produsers = new HashMap<String, String>(); produsers.put("stefan.adamski", "123456789"); produsers.put("anna.radosna", "123456789"); produsers.put("marek.nowicki", "123456789"); users.put(environment.production, produsers);

5 public class LogonDialog { private Dialog<Pair<Environment, String>> dialog; private ChoiceBox<Environment> cbxenv; private ComboBox<String> cbxusers; private PasswordField passfield; private ButtonType loginbtntype; private ButtonType cancelbtntype; private GridPane grid; private UsersDB users = UsersDB.getInstance(); final int WIDTH = 200; public LogonDialog(String title, String header) { initializecontrols(); dialog.settitle(title); dialog.setheadertext(header); public Optional<Pair<Environment, String>> showandwait() { return dialog.showandwait();

6 private void initializecontrols() { grid = new GridPane(); grid.sethgap(10); grid.setvgap(10); grid.setpadding(new Insets(20, 30, 20, 30)); dialog = new Dialog<Pair<Environment, String>>(); dialog.getdialogpane().setcontent(grid); dialog.setresultconverter( buttontype -> resultconverter(buttontype)); defineicon(); defineimage(); definebuttons(); defineenvchoicebox(); defineuserscombobox(); definepassfield(); private void defineimage() { Image image = new Image( ClassLoader.getSystemResourceAsStream("Login_64x.png")); ImageView imageview = new ImageView(image); dialog.setgraphic(imageview);

7 private void defineicon() { Stage stage = (Stage) dialog.getdialogpane().getscene().getwindow(); stage.geticons().add(new Image(ClassLoader.getSystemResourceAsStream("Login_16x.png"))); private void definebuttons() { loginbtntype = new ButtonType("Logon", ButtonData.OK_DONE); cancelbtntype = new ButtonType( "Anuluj",ButtonData.CANCEL_CLOSE); dialog.getdialogpane().getbuttontypes().addall( loginbtntype, cancelbtntype); Node loginnode = dialog.getdialogpane().lookupbutton(loginbtntype); loginnode.setdisable(true); private void cbxenv_changed(environment newval) { cbxusers.getitems().clear(); users.getusers(newval).foreach( user -> cbxusers.getitems().add(user));

private void cbxusers_changed(string newval) { Node loginnode = dialog.getdialogpane().lookupbutton(loginbtntype); loginnode.setdisable(newval == null newval.isempty() passfield.gettext().isempty()); private void passfield_changed(string newval) { Node loginnode = dialog.getdialogpane().lookupbutton(loginbtntype); loginnode.setdisable(newval.trim().isempty() cbxusers.getvalue() == null); private void defineenvchoicebox() { cbxenv = new ChoiceBox<Environment>(); Label lblenv = new Label("Środowisko:"); lblenv.setprefwidth(width / 2); cbxenv.getitems().add(environment.production); cbxenv.getitems().add(environment.test); cbxenv.getitems().add(environment.development); cbxenv.setvalue(cbxenv.getitems().get(0)); cbxenv.setprefwidth(width); cbxenv.valueproperty().addlistener( (observable, oldval, newval) -> cbxenv_changed(newval)); grid.add(lblenv, 0, 0); grid.add(cbxenv, 1, 0); 8

private void defineuserscombobox() { cbxusers = new ComboBox<String>(); cbxusers.seteditable(true); cbxusers.setprefwidth(width); users.getusers(environment.production).foreach(user -> cbxusers.getitems().add(user)); cbxusers.valueproperty().addlistener( (observable, oldval, newval) -> cbxusers_changed(newval)); Label lbluser = new Label("Użytkownik:"); lbluser.setprefwidth(width / 2); grid.add(lbluser, 0, 1); grid.add(cbxusers, 1, 1); private void definepassfield() { passfield = new PasswordField(); passfield.setprompttext("hasło"); passfield.setprefwidth(width); passfield.textproperty().addlistener( (observable, oldval, newval) -> passfield_changed(newval)); Label lblpass = new Label("Hasło:"); lblpass.setprefwidth(width / 2); grid.add(lblpass, 0, 2); grid.add(passfield, 1, 2); 9

10 private Pair<Environment, String> resultconverter(buttontype buttontype) { if (buttontype == loginbtntype) { if (users.ispasscorrect(cbxenv.getvalue(), cbxusers.getvalue(), passfield.gettext())) { return new Pair<Environment, String>( cbxenv.getvalue(), cbxusers.getvalue()); return null;

11 public class Main extends Application { public static void main(string[] args) { launch(args); @Override public void start(stage primarystage) { Optional<Pair<Environment,String>> result = (new LogonDialog("Logowanie", "Logowanie do systemu STYLEman")).showAndWait(); Alert alert = new Alert(AlertType.INFORMATION); alert.settitle("logowanie"); if (result.ispresent()) { alert.setheadertext("środowisko '" + result.get().getkey() + "'"); alert.setcontenttext("użytkownik '" + result.get().getvalue() + "' został autoryzowany."); else { alert.setalerttype(alerttype.warning); alert.setheadertext(null); alert.setcontenttext("użytkownik nie został autoryzowany."); alert.showandwait();