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();