Programovanie

Vylepšenia JavaFX v prostredí Java SE 8u40

Predchádzajúca 1 2 3 4 Strana 3 Ďalšia Strana 3 zo 4

Zoznam 5 používa java.util.Pair triedy, aby ste pohodlne uložili dvojicu položiek: vyhľadávací text a boolovskú hodnotu hľadania malých a veľkých písmen. Bol nainštalovaný prevodník výsledkov na prevod hodnôt vyhľadávacieho textového poľa dialógového okna a hľadania malých a veľkých písmen na hodnoty a Pár objekt vrátený z volať () metóda. K tejto premene dôjde, iba ak Vyhľadávanie je kliknuté tlačidlo; to sa nestane ked Zrušiť je kliknuté.

Hľadáte search.png?

Zoznam 5 sa spolieha na externé hľadať.png obrazový súbor, ktorý je zahrnutý v archíve kódov tohto článku.

Zostavte zoznam 5 takto:

javac SearchDialog.java

Výslednú aplikáciu spustite nasledujúcim spôsobom:

java SearchDialog

Obrázok 18 zobrazuje výsledný dialóg.

Obrázok 18: Dialógové okno vyhľadávania predvolene neobsahuje žiadny vyhľadávací text a nerozlišuje veľkosť písmen

Predpokladajme, že vstúpite JavaFX do textového poľa a začiarknite políčko. Po kliknutí Vyhľadávanie, mali by ste na štandardnom výstupnom toku sledovať nasledujúci výstup:

Vyhľadávaný text = JavaFX, vyhľadávanie veľkých a malých písmen = true

Otázka: Môžete mi poskytnúť viac informácií o tom, ako JavaFX podporuje štandardné a vlastné dialógové okná?

A: V dialógových oknách JavaFX nájdete ďalšie príklady štandardných a vlastných dialógových okien (vrátane vlastného dialógového okna na prihlásenie) a dozviete sa viac o štýloch dialógových okien a nastaveniach vlastníka a modality dialógových okien.

Ovládanie roztočovača

Otázka: Čo je to spinner?

A: A rozmetávač je jednoriadkový ovládací prvok textového poľa, ktorý umožňuje používateľovi vybrať číslo alebo hodnotu objektu z usporiadanej postupnosti takýchto hodnôt. Prívlačidlá zvyčajne poskytujú dvojicu malých tlačidiel so šípkami na prechádzanie prvkami sekvencie. Klávesnica šípka hore/šípka dole klávesy tiež prechádzajú prvkami. Používateľovi sa tiež môže povoliť priamo do číselníka napísať (legálnu) hodnotu. Aj keď kombinované polia poskytujú podobné funkcie, niekedy sú uprednostňované číselníky, pretože nevyžadujú rozbaľovací zoznam, ktorý by mohol zakrývať dôležité údaje, a tiež preto, že umožňujú funkcie, ako je zabalenie z maximálnej hodnoty späť na minimálnu hodnotu (napr. od najväčšieho kladného celého čísla po 0).

Otázka: Ako sa číselník implementuje?

A: Rozmetač je implementovaný ako inštancia súboru javafx.scene.control.Spinner kontrolná trieda. Táto trieda sa spolieha na abstrakt javafx.scene.control.SpinnerValueFactory triedy na poskytnutie modelu ovládacieho prvku (rozsah užívateľsky voliteľných hodnôt konkrétneho typu). V súčasnosti sú vnorené iba jediné podporované modely DoubleSpinnerValueFactory, IntegerSpinnerValueFactorya ListSpinnerValueFactory triedy.

Otázka: Ako vytvorím rotačku?

A: Kruhový číselník vytvoríte zavolaním jedného z Spinnerkonštruktéri. Napríklad, Spinner (int min, int max, int initialValue) vytvorí číselník na výber jednej z celočíselných hodnôt z min cez max. Pôvodne zvolená hodnota je označená pôvodná hodnota. Ak táto hodnota nie je v min/max rozsah, minHodnota sa stane pôvodne vybranou hodnotou.

Spinner (int min, int max, int initialValue) je pohodlný konštruktor, ktorý inštaluje inštanciu súboru IntegerSpinnerValueFactory triedy s týmito hodnotami ako modelom. Ak dávate prednosť priamej spolupráci s IntegerSpinnerValueFactory, môžete vytvoriť inštanciu tejto triedy a odovzdať jej odkaz na Spinner (SpinnerValueFactory valueFactory) konštruktér. Prípadne môžete vytvoriť prázdny číselník pomocou Spinner () konštruktor a vyvolať Spinnerje void setValueFactory (hodnota SpinnerValueFactory) metóda na inštaláciu tohto továrenského objektu.

Otázka: Môžete uviesť jednoduchý príklad celočíselných a dvojitých presných číselníkov s pohyblivou rádovou čiarkou?

A: Pozrite sa na zoznam 6.

Výpis 6. SpinnerDemo.java (verzia 1)

import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class SpinnerDemo rozširuje aplikáciu {@Override public void start (Stage primaryStage) {Spinner ispinner = nový Spinner (1, 10, 2); Spinner dspinner = nový Spinner (1,5; 3,5; 1,5; 0,5); GridPane grid = nový GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nové vložky (10)); grid.add (nový štítok ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (nový štítok („Double Spinner“), 0, 1); grid.add (dspinner, 1, 1); Scéna scéna = nová scéna (mriežka, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scéna); primaryStage.show (); }}

Zoznam 6 štart () metóda najskôr vytvorí celočíselný číselník prostredníctvom vyššie uvedeného konštruktora. Potom vytvorí dvojitý presný číselník s pohyblivou rádovou čiarkou cez Spinner (double min, double max, double initialValue, double amountToStepBy) konštruktér. Tento konštruktor prijíma jednotky, v ktorých sa prírastok alebo úbytok rotátora zvyšuje pomocou hodnoty, ktorá sa odovzdáva sumaToStepBy, čo sa náhodou stáva 0.5.

Pokračovanie, štart () vytvorí a nakonfiguruje kontajner mriežky a vyplní mriežku 2-riadok po 2-stĺpci týmito číselníkmi a priradenými štítkami. Potom vytvorí scénu na základe mriežky a nakonfiguruje / zobrazí scénu.

Zostavte zoznam 6 takto:

javac SpinnerDemo.java

Výslednú aplikáciu spustite nasledujúcim spôsobom:

java SpinnerDemo

Obrázok 19 ukazuje výsledné užívateľské rozhranie.

Obrázok 19: Kliknutím na šípky každého rozmetávača zvyšujete alebo znižujete rozsah hodnôt

Otázka: Chcem, aby boli predchádzajúce rotačky upraviteľné. Ako dosiahnem túto úlohu?

A: Volaj Spinnerje void setEditable (logická hodnota) metóda, absolvovanie pravda do hodnotu. Vytvoril som druhú verziu aplikácie SpinnerDemo demonštrovať. Zdrojový kód nájdete v archíve kódov tohto článku.

Otázka: Keď upravím predchádzajúce číselníky, zadajte do textového poľa nedovolené znaky (napríklad písmená) a stlačte kláves Zadajte kľúč, vyvolá sa výnimka. Výnimkou je java.lang.NumberFormatException pre celočíselný číselník a java.lang.RuntimeException (obal java.text.ParseException) pre číselník s dvojitou presnosťou s pohyblivou rádovou čiarkou. Ako zabránim vyvolaniu tejto výnimky?

A: Vyvolávaniu tejto výnimky môžete zabrániť inštaláciou inštancie podtriedy abstraktu javafx.util.StringConverter trieda (kde T je typ prevádzaný na alebo z String) ako SpinnerValueFactory prevodník. Tento objekt by zachytil vyvolanú výnimku a vykonal akciu.

Spinner používa a javafx.scene.control.TextField objekt ako editor na získanie vstupu používateľa. Pretože do textového poľa je možné uložiť akýkoľvek znak, je možné zadať nevhodné znaky, napríklad písmená, v číselnom kontexte. Potom, čo používateľ stlačí Zadajte, vstup je odovzdaný do SpinnerValueFactory prevodník T fromString (reťazec reťazca) metóda. Pre továrne s celočíselnou alebo dvojitou presnosťou s pohyblivou rádovou čiarkou: T je buď Celé číslo alebo Dvojitý. Konverzia z reťazca s neplatnými znakmi na číslo vedie k vyvolaniu výnimky fromString (). Získajte odkaz na aktuálny prevodník a nainštalujte nový prevodník, ktorého fromString () metóda vyvolá konverziu druhého prevodníka fromString () metóda v a skús vyhlásenie s príslušným chytiť blokovať. Zoznam 7 predstavuje aplikáciu, ktorá plní túto úlohu.

Výpis 7. SpinnerDemo.java (verzia 3)

import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.StringConverter; public class SpinnerDemo rozširuje aplikáciu {@Override public void start (Stage primaryStage) {Spinner ispinner = nový Spinner (1, 10, 2); ispinner.setEditable (true); StringConverter sci = ispinner.getValueFactory (). GetConverter (); StringConverter sci2 = nový StringConverter () {@Override public Integer fromString (hodnota reťazca) {try {return sci.fromString (hodnota); } catch (NumberFormatException nfe) {System.out.println ("Zlé celé číslo:" + hodnota); návrat 0; }} @Override public String toString (Integer value) {return sci.toString (value); }}; ispinner.getValueFactory (). setConverter (sci2); Spinner dspinner = nový Spinner (1,5; 3,5; 1,5; 0,5); dspinner.setEditable (true); StringConverter scd = dspinner.getValueFactory (). GetConverter (); StringConverter scd2 = nový StringConverter () {@Override public Double fromString (hodnota reťazca) {try {return scd.fromString (hodnota); } catch (RuntimeException re) {System.out.println ("Zlá dvojka:" + hodnota); System.out.println ("Príčina:" + re.getCause ()); návratnosť 0,0; }} @Override public String toString (dvojnásobná hodnota) {return scd.toString (hodnota); }}; dspinner.getValueFactory (). setConverter (scd2); GridPane grid = nový GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nové vložky (10)); grid.add (nový štítok ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (nový štítok („Double Spinner“), 0, 1); grid.add (dspinner, 1, 1); Scéna scéna = nová scéna (mriežka, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scéna); primaryStage.show (); }}

Zostaviť zoznam 7 (javac SpinnerDemo.java) a výslednú aplikáciu spustite (java SpinnerDemo). Pri zadávaní nepovolených znakov do textového poľa číselníka by ste mali sledovať chybové správy podobné tým, ktoré sú uvedené nižšie:

Zlé celé číslo: a2 Zlé dvojité: b1,5 Príčina: java.text.ParseException: Neporovnateľné číslo: „b1,5“

Otázka: Potrebujem spinner na báze strún. Ako ich môžem získať?

A: Reťazcový spinner môžete získať prostredníctvom Spinner (položky pozorovateľného zoznamu) konštruktér. Napríklad nasledujúci fragment kódu ukazuje, ako vytvoriť číselník na výber názvu dňa v týždni:

Zoznam weekDays = Arrays.asList ("pondelok", "utorok", "streda", "štvrtok", "piatok", "sobota", "nedeľa"); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = nový Spinner (obsWeekDays);

Tento fragment kódu som vyňal zo štvrtej verzie SpinnerDemo aplikácie (zdrojový kód nájdete v archíve kódov tohto článku). Po spustení tejto aplikácie uvidíte číselník zobrazený na obrázku 20.

Obrázok 20: Výsledkom pokusu o zadanie textu do editora, ktorý sa presne nezhoduje s jedným z názvov pracovných dní java.lang.UnsupportedOperationException byť vyhodený

Otázka: Môžete mi poskytnúť viac informácií o podpore spinnerov JavaFX?

A: Prezrite si dokumentáciu k JavaFX 8 na Spinner a SpinnerValueFactory pre viac informácií o tomto ovládacom prvku a jeho modeli. Možno budete tiež chcieť spustiť vyhľadávanie Google, aby ste zistili, ako ostatní používajú tento ovládací prvok.

Formátovanie textu

Otázka: Ako podporuje JavaFX formátovanie textu?

A: JavaFX podporuje formátovanie textu poskytovaním javafx.scene.control.TextFormatter triedy so svojimi vnorenými Zmena trieda. Ďalej abstrakt javafx.scene.control.TextInputControl trieda (materská trieda Textové pole a javafx.scene.control.TextArea) dostal a textový formát vlastnosť, takže ktorákoľvek podtrieda automaticky podporuje formátovanie textu.

Otázka: Aké druhy formátovania textu sú podporované?

A:TextFormatter podporuje dva druhy formátovania textu: hodnotu a zmenu. A formátovač hodnoty sa volá, keď stlačíte Zadajte po zadaní textu. A zmeniť formátovač je volaná pre každú zmenu odstránenia textu, pridania textu a výmeny textu pre ovládací prvok zameraného zadávania textu. Tieto formátory je možné použiť samostatne alebo spoločne.

Otázka: Ako sú určené formátovače hodnoty a zmeny?

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