Programavimas

„JavaFX“ patobulinimai „Java SE 8u40“

Ankstesnis 1 2 3 4 Puslapis 3 Kitas 3 puslapis iš 4

5 sąraše naudojamas java.util.Pora klasėje patogiai laikyti porą daiktų: paieškos tekstą ir Būlo didžiosioms ir mažosioms raidėms reikšmę. Įdiegtas rezultatų keitiklis, kuris dialogo lango paieškos teksto lauko ir didžiųjų ir mažųjų raidžių žymėjimo langelių reikšmes paverčia į Pora objektas, kuris grąžinamas iš skambinti () metodas. Ši konversija įvyksta tik tada, kai Paieška paspaudžiamas mygtukas; tai neįvyksta, kai Atšaukti yra spustelėtas.

Ieškote search.png?

5 sąrašas priklauso nuo išorės search.png vaizdo failas, kuris yra įtrauktas į šio straipsnio kodų archyvą.

Sudarykite 5 sąrašą taip:

javac SearchDialog.java

Paleiskite gautą programą taip:

java SearchDialog

18 paveiksle parodytas gautas dialogas.

18 pav. Paieškos dialogo langelyje pagal numatytuosius nustatymus nėra paieškos teksto ir didžiųjų ir mažųjų raidžių

Tarkime, kad įvedėte „JavaFX“ teksto lauke ir pažymėkite žymės langelį. Paspaudus Paieška, turėtumėte stebėti tokį išvestį standartiniame išvesties sraute:

Paieškos tekstas = „JavaFX“, didžiųjų ir mažųjų raidžių paieškos = tiesa

Klausimas: Ar galite pateikti daugiau informacijos apie „JavaFX“ palaikymą standartiniams ir pasirinktiniams dialogo langams?

A: Peržiūrėkite „JavaFX Dialogs“, kur rasite papildomų standartinių ir pasirinktinių dialogo pavyzdžių (įskaitant pasirinktinį prisijungimo dialogo langą) ir sužinokite apie dialogo stilių bei dialogo lango savininko ir modalumo nustatymą.

Suktuko valdymas

Klausimas: Kas yra suktukas?

A: A suktukas yra vienos eilutės teksto lauko valdiklis, leidžiantis vartotojui pasirinkti skaičių ar objekto vertę iš sutvarkytos tokių verčių sekos. Verpėjai paprastai pateikia mažas rodyklių mygtukus, kad pereitų per sekos elementus. Klaviatūra rodyklė aukštyn/rodyklė žemyn raktai taip pat pereina per elementus. Vartotojui taip pat gali būti leidžiama įvesti (teisinę) vertę tiesiai į suktuką. Nors kombinuotosios dėžutės suteikia panašią funkciją, kartais pirmenybė teikiama verpėjams, nes jiems nereikia išskleidžiamojo sąrašo, kuris gali užgožti svarbius duomenis, taip pat dėl ​​to, kad jie leidžia naudoti tokias funkcijas kaip apvyniojimas nuo didžiausios vertės iki minimalios vertės (pvz. nuo didžiausio teigiamo sveiko skaičiaus iki 0).

Klausimas: Kaip sukasi suktukas?

A: Suktukas yra įgyvendinamas kaip javafx.scene.control.Spinner kontrolinė klasė. Ši klasė remiasi abstrakčiu javafx.scene.control.SpinnerValueFactory klasę, kad būtų pateiktas valdiklio modelis (vartotojo pasirinktų tam tikro tipo verčių diapazonas). Šiuo metu vieninteliai palaikomi modeliai apibrėžiami jo įdėta „DoubleSpinnerValueFactory“, „IntegerSpinnerValueFactory“ir „ListSpinnerValueFactory“ klasės.

Klausimas: Kaip sukurti suktuką?

A: Sukuriate verpėją paskambinę vienam iš Suktukaskonstruktoriai. Pavyzdžiui, Suktukas (int min, int max, int initialValue) sukuria suktuką, pasirinkdami vieną iš sveikųjų skaičių reikšmių iš min per maks. Iš pradžių pasirinktą vertę identifikuoja pradinė vertė. Jei šios vertės nėra min/maks diapazonas, minreikšmė tampa iš pradžių pasirinkta.

Suktukas (int min, int max, int initialValue) yra patogus konstruktorius, kuris įdiegia „IntegerSpinnerValueFactory“ klasėje, kur šios vertės yra modelis. Jei norite dirbti tiesiogiai su „IntegerSpinnerValueFactory“, galite sukurti šią klasę ir perduoti jos nuorodą į „Spinner“ („SpinnerValueFactory valueFactory“) konstruktorius. Arba galite sukurti tuščią suktuką per Verpėjas () konstruktorius ir pasikvieskite Suktukas's void setValueFactory („SpinnerValueFactory“ vertė) metodas įdiegti šį gamyklos objektą.

Klausimas: Ar galite pateikti paprastą sveikojo ir dvigubo tikslumo slankiojo kablelio suktukų pavyzdį?

A: Peržiūrėkite 6 sąrašą.

6 sąrašas. SpinnerDemo.java (1 versija)

importuoti javafx.application.Application; importuoti javafx.geometry.Insets; importuoti javafx.scene.Scene; importuoti javafx.scene.control.Label; importuoti javafx.scene.control.Spinner; importuoti javafx.scene.layout.GridPane; importuoti javafx.stage.Stage; viešoji klasė „SpinnerDemo“ pratęsia paraišką {@Paisyti viešą negaliojančią pradžią („Stage primaryStage“) {Spinner ispinner = naujas verpėjas (1, 10, 2); Spining dspinner = naujas verpėjas (1,5, 3,5, 1,5, 0,5); „GridPane“ tinklelis = new GridPane (); tinklelis.setHgap (10); tinklelis.setVgap (10); grid.setPadding (nauji įdėklai (10)); grid.add (nauja etiketė („Integer Spinner“), 0, 0); tinklelis.add (ispinner, 1, 0); grid.add (nauja etiketė („Double Spinner“), 0, 1); tinklelis.add (dspinner, 1, 1); Scenos scena = nauja scena (tinklelis, 350, 100); primaryStage.setTitle („SpinnerDemo“); primaryStage.setScene (scena); primaryStage.show (); }}

6 sąrašas pradžia () metodas pirmiausia sukuria sveiko skaičiaus suktuką per minėtą konstruktorių. Tada jis sukuria dvigubo tikslumo slankiojo kablelio suktuką Suktukas (dviguba min., Dviguba maks., Dviguba pradinė vertė, dviguba suma „ToStepBy“) konstruktorius. Šis konstruktorius gauna vienetus, kuriais padidinsite arba sumažinsite suktuką, perduodamą vertę sumaToStepBy, kas būna 0.5.

Tęsiant, pradžia () sukuria ir sukonfigūruoja tinklelio srities konteinerį ir užpildo 2 eilučių po 2 stulpelius tinklelį su šiais suktukais ir susijusiomis etiketėmis. Tada sukuria sceną pagal tinklelį ir konfigūruoja / rodo sceną.

Sudarykite 6 sąrašą taip:

javac SpinnerDemo.java

Paleiskite gautą programą taip:

java SpinnerDemo

19 paveiksle atskleidžiama vartotojo sąsaja.

19 paveikslas: Spustelėkite kiekvienos suktuko rodykles, kad padidintumėte / sumažintumėte vertybių diapazoną

Klausimas: Noriu, kad ankstesni suktukai būtų redaguojami. Kaip atlikti šią užduotį?

A: Skambinkite Suktukas's void setEditable (loginė vertė) metodas, perdavimas tiesa į vertė. Aš sukūriau antrą versiją „SpinnerDemo“ demonstruoti. Peržiūrėkite šio straipsnio kodų archyvą.

Klausimas: Kai padarysiu ankstesnius suktukus redaguojamus, į teksto lauką įrašykite neteisėtus simbolius (pvz., Raides) ir paspauskite Įveskite raktas, išmetama išimtis. Išimtis yra java.lang.NumberFormatException sveikam skaičiui priklausančiam suktukui ir java.lang.RuntimeException (įvyniojimas java.text.ParseException) dvigubo tikslumo slankiojo kablelio suktukui. Kaip galėčiau užkirsti kelią šios išimties metimui?

A: Galite užkirsti kelią šiai išimčiai mesti įdiegdami santraukos poklasio egzempliorių javafx.util.StringConverter klasė (kur T yra tipas, konvertuojamas į arba iš Stygos) kaip „SpinnerValueFactory“ keitiklis. Šis objektas pagaus išmetamą išimtį ir imsis veiksmų.

Suktukas naudoja a javafx.scene.control.TextField objektas kaip redaktorius, skirtas gauti vartotojo įvestį. Kadangi teksto lauke gali būti bet koks simbolis, skaitiniame kontekste galima įvesti netinkamus simbolius, pvz., Raides. Vartotojui paspaudus Įveskite, įvestis perduodama „SpinnerValueFactory“ keitikliai T fromString (eilutės eilutė) metodas. Visų skaičių arba dvigubo tikslumo slankiojo kablelio gamykloms T yra arba Sveikasis skaičius arba Dvigubai. Konvertuojant iš eilutės su neteisėtais simboliais į skaičių gaunama išimtis fromString (). Gaukite nuorodą į dabartinį keitiklį ir įdiekite naują keitiklį, kurio fromString () metodas iškviečia kitus keitiklius fromString () metodas a bandyti pareiškimas su atitinkamu pagauti blokuoti. 7 sąraše pateikiama programa, atliekanti šią užduotį.

7 sąrašas. SpinnerDemo.java (3 versija)

importuoti javafx.application.Application; importuoti javafx.geometry.Insets; importuoti javafx.scene.Scene; importuoti javafx.scene.control.Label; importuoti javafx.scene.control.Spinner; importuoti javafx.scene.layout.GridPane; importuoti javafx.stage.Stage; importuoti javafx.util.StringConverter; viešoji klasė „SpinnerDemo“ pratęsia paraišką {@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 () {@Paisyti viešąjį sveikąjį skaičių išString (String value) {try {return sci.fromString (value); } sugauti (NumberFormatException nfe) {System.out.println ("Blogas sveikasis skaičius:" + reikšmė); grąžinti 0; }} @Paisyti viešosios eilutės toString (sveiko skaičiaus reikšmė) {grąžinti sci.toString (reikšmė); }}; ispinner.getValueFactory (). setConverter (sci2); Spining dspinner = naujas verpėjas (1,5, 3,5, 1,5, 0,5); dspinner.setEditable (true); „StringConverter“ scd = dspinner.getValueFactory (). GetConverter (); „StringConverter“ scd2 = nauja „StringConverter“ () {@Paisyti viešąjį dvigubą „fromString“ (eilutės vertė) {pabandykite {grąžinti scd.fromString (vertė); } pagauti („RuntimeException re“) {System.out.println ("Blogas dvigubas:" + reikšmė); System.out.println ("Priežastis:" + re.getCause ()); grąža 0,0; }} @Orride public String toString (Double value) {grąžinti scd.toString (reikšmė); }}; dspinner.getValueFactory (). setConverter (scd2); „GridPane“ tinklelis = new GridPane (); tinklelis.setHgap (10); tinklelis.setVgap (10); grid.setPadding (nauji įdėklai (10)); grid.add (nauja etiketė („Integer Spinner“), 0, 0); tinklelis.add (ispinner, 1, 0); grid.add (nauja etiketė („Double Spinner“), 0, 1); tinklelis.add (dspinner, 1, 1); Scenos scena = nauja scena (tinklelis, 350, 100); primaryStage.setTitle („SpinnerDemo“); primaryStage.setScene (scena); primaryStage.show (); }}

Sudaryti 7 sąrašą (javac SpinnerDemo.java) ir paleiskite gautą programą (java SpinnerDemo). Turėtumėte stebėti klaidų pranešimus, panašius į nurodytus žemiau, kai į suktuko teksto lauką įvedate neteisėtus simbolius:

Netinkamas sveikasis skaičius: a2 Blogas dvigubas: b1.5 Priežastis: java.text.ParseException: Nepašalinamas skaičius: „b1.5“

Klausimas: Man reikia styginių verpimo. Kaip jį gauti?

A: Galite įsigyti virvelių sukimo priemonę per „Spinner“ („ObservableList“ elementai) konstruktorius. Pvz., Šiame kodo fragmente parodyta, kaip sukurti suktuką savaitės dienos pavadinimui pasirinkti:

Sąrašas weekDays = Arrays.asList („pirmadienis“, „antradienis“, „trečiadienis“, „ketvirtadienis“, „penktadienis“, „šeštadienis“, „sekmadienis“); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = naujas verpėjas (obsWeekDays);

Ištraukiau šį kodo fragmentą iš ketvirtosios „SpinnerDemo“ programa (žr. šio straipsnio kodų archyvą, kuriame rasite šaltinio kodą). Paleidę tą programą pamatysite suktuką, parodytą 20 paveiksle.

20 paveikslas. Bandoma į redaktorių įvesti tekstą, kuris tiksliai neatitinka vieno iš savaitės dienų pavadinimų java.lang.UnsupportedOperationException metamas

Klausimas: Ar galėtumėte pateikti daugiau informacijos apie „JavaFX“ palaikymą verpėjams?

A: Peržiūrėkite „JavaFX 8“ dokumentaciją Suktukas ir „SpinnerValueFactory“ Norėdami gauti daugiau informacijos apie šį valdiklį ir jo modelį. Be to, galbūt norėsite paleisti „Google“ paiešką, kad sužinotumėte, kaip kiti naudoja šį valdiklį.

Teksto formatavimas

Klausimas: Kaip „JavaFX“ palaiko teksto formatavimą?

A: „JavaFX“ palaiko teksto formatavimą pateikdama javafx.scene.control.TextFormatter klasė su savo lizdais Keisti klasė. Be to, abstraktus javafx.scene.control.TextInputControl klasė (tėvų klasė) Teksto laukas ir javafx.scene.control.TextArea) buvo suteiktas a textFormatter ypatybė, kad bet kuris poklasis automatiškai palaikytų teksto formatavimą.

Klausimas: Kokio tipo teksto formatavimas palaikomas?

A:„TextFormatter“ palaiko dviejų tipų teksto formatavimą: reikšmę ir keitimą. A vertės formatavėjas yra vadinamas, kai paspausite Įveskite įvedę tekstą. A pakeisti formatą yra reikalingas kiekvienam teksto ištrynimui, papildymui ir pakeitimui, kad būtų galima atlikti fokusuotą teksto įvesties valdiklį. Šie formatai gali būti naudojami atskirai arba kartu.

Klausimas: Kaip nurodomi vertės ir pakeitimo formatai?

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