Προγραμματισμός

Βελτιώσεις JavaFX στο Java SE 8u40

Προηγούμενο 1 2 3 4 Σελίδα 3 Επόμενο Σελίδα 3 από 4

Η λίστα 5 χρησιμοποιεί το java.util.Pair τάξη για να αποθηκεύσετε εύκολα ένα ζευγάρι αντικειμένων: το κείμενο αναζήτησης και την τιμή αναζήτησης με ευαίσθητα γράμματα Boolean. Ένας μετατροπέας αποτελεσμάτων έχει εγκατασταθεί για τη μετατροπή του πεδίου κειμένου αναζήτησης του διαλόγου και των τιμών πλαισίου αναζήτησης με διάκριση πεζών σε α Ζεύγος αντικείμενο που επιστρέφεται από το κλήση() μέθοδος. Αυτή η μετατροπή συμβαίνει μόνο όταν το Αναζήτηση κλικ στο κουμπί? δεν συμβαίνει όταν Ματαίωση γίνεται κλικ.

Ψάχνετε για search.png;

Η καταχώριση 5 βασίζεται σε εξωτερικό search.png αρχείο εικόνας, το οποίο περιλαμβάνεται στο αρχείο κώδικα αυτού του άρθρου.

Συγκεντρώστε την καταχώριση 5 ως εξής:

javac SearchDialog.java

Εκτελέστε την εφαρμογή που προκύπτει ως εξής:

java SearchDialog

Το σχήμα 18 αποκαλύπτει το διάλογο που προκύπτει.

Σχήμα 18: Το παράθυρο διαλόγου αναζήτησης είναι προεπιλεγμένο σε κείμενο αναζήτησης και αναζήτηση χωρίς κεφαλαία

Ας υποθέσουμε ότι εισέρχεστε JavaFX στο πεδίο κειμένου και επιλέξτε το πλαίσιο ελέγχου. Αφού κάνετε κλικ Αναζήτηση, θα πρέπει να παρατηρήσετε την ακόλουθη έξοδο στην τυπική ροή εξόδου:

Κείμενο αναζήτησης = JavaFX, αναζήτηση με κεφαλαία = true

Ε: Μπορείτε να μου παράσχετε περισσότερες πληροφορίες σχετικά με την υποστήριξη του JavaFX για τυπικούς και προσαρμοσμένους διαλόγους;

ΕΝΑ: Ρίξτε μια ματιά στους Διαλόγους JavaFX για πρόσθετα τυπικά και προσαρμοσμένα παραδείγματα διαλόγου (συμπεριλαμβανομένου ενός προσαρμοσμένου διαλόγου σύνδεσης) και για να μάθετε σχετικά με το στυλ διαλόγου και τον ορισμό του κατόχου και του τρόπου διαλόγου.

Έλεγχος κλώσης

Ε: Τι είναι ένας κλώστης;

ΕΝΑ: ΕΝΑ κλώστης είναι ένας έλεγχος πεδίου κειμένου μίας γραμμής που επιτρέπει στο χρήστη να επιλέξει έναν αριθμό ή μια τιμή αντικειμένου από μια παραγγελθείσα ακολουθία τέτοιων τιμών. Οι περιστρεφόμενοι συνήθως παρέχουν ένα ζευγάρι μικροσκοπικών κουμπιών με βέλη για να περάσουν τα στοιχεία της ακολουθίας. Το πληκτρολόγιο επάνω βέλος/κάτω βελάκι Τα πλήκτρα κυλούν επίσης στα στοιχεία. Μπορεί επίσης να επιτραπεί στον χρήστη να πληκτρολογήσει μια (νόμιμη) τιμή απευθείας στο spinner. Παρόλο που τα σύνθετα κουτιά παρέχουν παρόμοια λειτουργικότητα, οι περιστροφές προτιμούνται μερικές φορές επειδή δεν απαιτούν μια αναπτυσσόμενη λίστα που μπορεί να αποκρύψει σημαντικά δεδομένα και επίσης επειδή επιτρέπουν λειτουργίες όπως η αναδίπλωση από τη μέγιστη τιμή στην ελάχιστη τιμή (π.χ. από τον μεγαλύτερο θετικό ακέραιο έως 0).

Ε: Πώς εφαρμόζεται ένας κλώστης;

ΕΝΑ: Ένας κλώστης υλοποιείται ως παρουσία του javafx.scene.control.Spinner τάξη ελέγχου. Αυτή η τάξη βασίζεται στην περίληψη javafx.scene.control.SpinnerValueFactory κλάση για να παρέχει το μοντέλο του ελέγχου (εύρος τιμών επιλέξιμων από χρήστη ενός συγκεκριμένου τύπου). Επί του παρόντος, τα μόνα υποστηριζόμενα μοντέλα ορίζονται από το ένθετο DoubleSpinnerValueFactory, IntegerSpinnerValueFactory, και ListSpinnerValueFactory τάξεις.

Ε: Πώς μπορώ να δημιουργήσω ένα spinner;

ΕΝΑ: Μπορείτε να δημιουργήσετε ένα spinner καλώντας ένα από ένα Κλώστηςκατασκευαστές. Για παράδειγμα, Spinner (int min, int max, int initialValue) δημιουργεί ένα spinner για την επιλογή μίας από τις ακέραιες τιμές από ελάχ διά μέσου Μέγιστη. Η αρχικά επιλεγμένη τιμή αναγνωρίζεται από αρχική τιμή. Εάν αυτή η τιμή δεν είναι στο ελάχ/Μέγιστη εύρος, ελάχΗ τιμή γίνεται η αρχικά επιλεγμένη τιμή.

Spinner (int min, int max, int initialValue) είναι ένας κατασκευαστής ευκολιών που εγκαθιστά μια παρουσία του IntegerSpinnerValueFactory τάξη με αυτές τις τιμές ως μοντέλο. Εάν προτιμάτε να εργάζεστε απευθείας με IntegerSpinnerValueFactory, μπορείτε να δημιουργήσετε αυτό το μάθημα και να περάσετε την αναφορά του στο Spinner (SpinnerValueFactory valueFactory) κατασκευαστής. Εναλλακτικά, μπορείτε να δημιουργήσετε ένα κενό spinner μέσω του Κλώστης() κατασκευαστής και επίκληση Κλώστης'μικρό void setValueFactory (SpinnerValueFactory τιμή) μέθοδος για την εγκατάσταση αυτού του εργοστασιακού αντικειμένου.

Ε: Μπορείτε να παράσχετε ένα απλό παράδειγμα περιστρεφόμενων νημάτων ακέραιου και διπλής ακρίβειας;

ΕΝΑ: Δείτε την καταχώριση 6.

Λίστα 6. SpinnerDemo.java (έκδοση 1)

εισαγωγή javafx.application.Application; εισαγωγή javafx.geometry.Insets; εισαγωγή javafx.scene.Scene; εισαγωγή javafx.scene.control.Label; εισαγωγή javafx.scene.control.Spinner; εισαγωγή javafx.scene.layout.GridPane; εισαγωγή javafx.stage.Stage; δημόσια τάξη SpinnerDemo επεκτείνει την εφαρμογή {@Override public void start (Stage primaryStage) {Spinner ispinner = new Spinner (1, 10, 2); Spinner dspinner = νέο Spinner (1.5, 3.5, 1.5, 0.5); GridPane πλέγμα = νέο GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (νέα ένθετα (10)); grid.add (νέα ετικέτα ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (νέα ετικέτα ("Double Spinner"), 0, 1); grid.add (dspinner, 1, 1); Σκηνή σκηνής = νέα σκηνή (πλέγμα, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (σκηνή); primaryStage.show (); }}

Λίστα 6's αρχή() Η μέθοδος δημιουργεί πρώτα έναν ακέραιο κλώστη μέσω του προαναφερθέντος κατασκευαστή. Στη συνέχεια δημιουργεί ένα περιστρεφόμενο περιστρεφόμενο σημείο διπλής ακρίβειας μέσω του Spinner (διπλό λεπτό, διπλό μέγιστο, διπλό αρχικό Αξία, διπλό ποσό ToStepBy) κατασκευαστής. Αυτός ο κατασκευαστής λαμβάνει τις μονάδες στις οποίες αυξάνεται ή μειώνεται ο κλώστης μέσω της τιμής που μεταβιβάζεται ποσόToStepBy, που συμβαίνει να είναι 0.5.

Συνεχίζοντας, αρχή() δημιουργεί και διαμορφώνει ένα κοντέινερ παραθύρου πλέγματος και συμπληρώνει το πλέγμα 2-σειρών με 2 στήλες με αυτά τα περιστρεφόμενα και τις σχετικές ετικέτες. Στη συνέχεια δημιουργεί τη σκηνή με βάση το πλέγμα και διαμορφώνει / δείχνει τη σκηνή.

Συγκεντρώστε την καταχώριση 6 ως εξής:

javac SpinnerDemo.java

Εκτελέστε την εφαρμογή που προκύπτει ως εξής:

java SpinnerDemo

Το σχήμα 19 αποκαλύπτει το προκύπτον περιβάλλον εργασίας χρήστη.

Σχήμα 19: Κάντε κλικ στα βέλη κάθε περιστρεφόμενου για να αυξήσετε / μειώσετε το εύρος τιμών

Ε: Θέλω να κάνω τους προηγούμενους γύρους επεξεργάσιμους. Πώς μπορώ να επιτύχω αυτήν την εργασία;

ΕΝΑ: Κλήση Κλώστης'μικρό void setEditable (τιμή boolean) μέθοδος, περνώντας αληθής προς την αξία. Έχω δημιουργήσει μια δεύτερη έκδοση του SpinnerDemo να δείξει. Δείτε το αρχείο κώδικα αυτού του άρθρου για τον πηγαίο κώδικα.

Ε: Όταν κάνω τα προηγούμενα κλώσιμα επεξεργάσιμα, πληκτρολογήστε παράνομους χαρακτήρες (όπως γράμματα) στο πεδίο κειμένου και πατήστε το Εισαγω κλειδί, μια εξαίρεση ρίχνεται. Η εξαίρεση είναι java.lang.NumberFormatException για το spinner με βάση τον ακέραιο και java.lang.RuntimeException (τύλιγμα java.text.ParseException) για τον περιστρεφόμενο κλώστη διπλής ακρίβειας. Πώς μπορώ να αποτρέψω τη ρίψη αυτής της εξαίρεσης;

ΕΝΑ: Μπορείτε να αποτρέψετε τη ρίψη αυτής της εξαίρεσης εγκαθιστώντας μια παρουσία μιας υποκατηγορίας της περίληψης javafx.util.StringConverter τάξη (πού Τ είναι ο τύπος που μετατρέπεται σε ή από Σειράως το SpinnerValueFactory μετατροπέας. Αυτό το αντικείμενο θα πιάσει την εξαίρεση που ρίχνεται και θα αναλάβει δράση.

Κλώστης χρησιμοποιεί ένα javafx.scene.control.TextField αντικείμενο ως συντάκτης για την απόκτηση εισόδου χρήστη. Επειδή ένα πεδίο κειμένου μπορεί να αποθηκεύσει οποιονδήποτε χαρακτήρα, μπορούν να εισαχθούν ακατάλληλοι χαρακτήρες, όπως γράμματα σε αριθμητικό περιβάλλον. Αφού πατήσει ο χρήστης Εισαγω, η είσοδος μεταφέρεται στο SpinnerValueFactory μετατροπέας T fromString (συμβολοσειρά συμβολοσειράς) μέθοδος. Για τα ακέραια ή διπλής ακρίβειας εργοστάσια κινητής υποδιαστολής, Τ είναι είτε Ακέραιος αριθμός ή Διπλό. Η μετατροπή από μια συμβολοσειρά με παράνομους χαρακτήρες σε έναν αριθμό έχει ως αποτέλεσμα την εξαίρεση από το από String (). Λάβετε μια αναφορά στον τρέχοντα μετατροπέα και εγκαταστήστε έναν νέο μετατροπέα του οποίου από String () Η μέθοδος επικαλείται τους άλλους μετατροπείς από String () μέθοδος σε ένα δοκιμάστε δήλωση με κατάλληλο σύλληψη ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ. Η λίστα 7 παρουσιάζει μια εφαρμογή που ολοκληρώνει αυτήν την εργασία.

Λίστα 7. SpinnerDemo.java (έκδοση 3)

εισαγωγή javafx.application.Application; εισαγωγή javafx.geometry.Insets; εισαγωγή javafx.scene.Scene; εισαγωγή javafx.scene.control.Label; εισαγωγή javafx.scene.control.Spinner; εισαγωγή javafx.scene.layout.GridPane; εισαγωγή javafx.stage.Stage; εισαγωγή javafx.util.StringConverter; δημόσια τάξη Το SpinnerDemo επεκτείνει την εφαρμογή {@Override public void start (Stage primaryStage) {Spinner ispinner = new Spinner (1, 10, 2); ispinner.setEditable (true); StringConverter sci = ispinner.getValueFactory (). GetConverter (); StringConverter sci2 = new StringConverter () {@Override public Integer fromString (String value) {δοκιμάστε {return sci.fromString (value); } catch (NumberFormatException nfe) {System.out.println ("Bad integer:" + τιμή); επιστροφή 0; }} @Override public String toString (ακέραια τιμή) {return sci.toString (value); }} ispinner.getValueFactory (). setConverter (sci2); Spinner dspinner = νέο Spinner (1.5, 3.5, 1.5, 0.5); dspinner.setEditable (true); StringConverter scd = dspinner.getValueFactory (). GetConverter (); StringConverter scd2 = νέο StringConverter () {@Override public Double fromString (String value) {try {return scd.fromString (value); } catch (RuntimeException re) {System.out.println ("Bad double:" + τιμή); System.out.println ("Αιτία:" + re.getCause ()); επιστροφή 0,0; }} @Override public String toString (Διπλή τιμή) {return scd.toString (τιμή); }} dspinner.getValueFactory (). setConverter (scd2); GridPane πλέγμα = νέο GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (νέα ένθετα (10)); grid.add (νέα ετικέτα ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (νέα ετικέτα ("Double Spinner"), 0, 1); grid.add (dspinner, 1, 1); Σκηνή σκηνής = νέα σκηνή (πλέγμα, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (σκηνή); primaryStage.show (); }}

Συλλογή καταχώρισης 7 (javac SpinnerDemo.java) και εκτελέστε την εφαρμογή που προκύπτει (java SpinnerDemo). Θα πρέπει να παρατηρήσετε μηνύματα σφάλματος παρόμοια με αυτά που εμφανίζονται παρακάτω όταν εισάγετε παράνομους χαρακτήρες στο πεδίο κειμένου ενός κλώστη:

Bad integer: a2 Bad double: b1.5 Αιτία: java.text.ParseException: Απροσδιόριστος αριθμός: "b1.5"

Ε: Χρειάζομαι κλωστή με βάση χορδές. Πώς μπορώ να αποκτήσω ένα;

ΕΝΑ: Μπορείτε να αποκτήσετε έναν κλώστη που βασίζεται σε χορδές μέσω του Spinner (αντικείμενα παρατηρήσιμης λίστας) κατασκευαστής. Για παράδειγμα, το ακόλουθο τμήμα κώδικα σας δείχνει πώς να δημιουργήσετε ένα spinner για την επιλογή ενός ονόματος ημέρας:

Λίστα weekDays = Arrays.asList ("Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = νέο Spinner (obsWeekDays);

Απόσπασα αυτό το κομμάτι κώδικα από μια τέταρτη έκδοση του SpinnerDemo εφαρμογή (ανατρέξτε στο αρχείο κώδικα αυτού του άρθρου για τον πηγαίο κώδικα). Όταν εκτελείτε αυτήν την εφαρμογή, θα δείτε το spinner που φαίνεται στο σχήμα 20.

Εικόνα 20: Απόπειρα εισαγωγής κειμένου στον επεξεργαστή που δεν ταιριάζει ακριβώς με ένα από τα αποτελέσματα των ονομάτων της εβδομάδας java.lang.UnsupportedOperationException ρίχνονται

Ε: Μπορείτε να μου παράσχετε περισσότερες πληροφορίες σχετικά με την υποστήριξη του JavaFX για spinners;

ΕΝΑ: Ρίξτε μια ματιά στην τεκμηρίωση JavaFX 8 Κλώστης και SpinnerValueFactory για περισσότερες πληροφορίες σχετικά με αυτόν τον έλεγχο και το μοντέλο του. Επίσης, ίσως θέλετε να εκτελέσετε μια αναζήτηση Google για να μάθετε πώς χρησιμοποιούν άλλοι αυτόν τον έλεγχο.

Μορφοποίηση κειμένου

Ε: Πώς υποστηρίζει το JavaFX τη μορφοποίηση κειμένου;

ΕΝΑ: Το JavaFX υποστηρίζει τη μορφοποίηση κειμένου παρέχοντας το javafx.scene.control.TextFormatter τάξη με ένθετα Αλλαγή τάξη. Επιπλέον, η περίληψη javafx.scene.control.TextInputControl τάξη (η μητρική τάξη του Πεδίο κειμένου και javafx.scene.control.TextArea) έχει δοθεί ένα textFormatter ιδιότητα έτσι ώστε οποιαδήποτε υποκατηγορία υποστηρίζει αυτόματα τη μορφοποίηση κειμένου

Ε: Τι είδους μορφοποίηση κειμένου υποστηρίζονται;

ΕΝΑ:Κείμενο μορφοποίησης υποστηρίζει δύο είδη μορφοποίησης κειμένου: αξία και αλλαγή. ΕΝΑ διαμορφωτής αξίας καλείται όταν πατάτε το Εισαγω κλειδί μετά την εισαγωγή του κειμένου. ΕΝΑ αλλαγή μορφοποιητή καλείται για κάθε διαγραφή κειμένου, προσθήκη κειμένου και αλλαγή αντικατάστασης κειμένου για τον εστιασμένο έλεγχο εισαγωγής κειμένου. Αυτοί οι μορφοποιητές μπορούν να χρησιμοποιηθούν ξεχωριστά ή μαζί.

Ε: Πώς προσδιορίζονται οι μορφοποιητές τιμής και αλλαγής;

$config[zx-auto] not found$config[zx-overlay] not found