Výpis 5 používá java.util.Pair
třídy pro pohodlné uložení dvojice položek: vyhledávaný text a logická hodnota hledání s rozlišením malých a velkých písmen. Byl nainstalován převaděč výsledků, který převede hodnoty pole pro vyhledávání v dialogovém okně a hledání rozlišují velká a malá písmena na a Pár
objekt, který je vrácen z volání()
metoda. K tomuto převodu dojde, pouze když Vyhledávání
tlačítko je kliknuto; to se nestane, když zrušení
je kliknuto.
Hledáte search.png?
Výpis 5 závisí na externím search.png
obrazový soubor, který je obsažen v archivu kódů tohoto článku.
Sestavte výpis 5 následujícím způsobem:
javac SearchDialog.java
Výslednou aplikaci spusťte následovně:
java SearchDialog
Obrázek 18 ukazuje výsledný dialog.
Obrázek 18: Výchozí dialogové okno vyhledávání neobsahuje žádný text pro vyhledávání a hledání bez rozlišení velkých a malých písmen
Předpokládejme, že vstoupíte JavaFX
do textového pole a zaškrtněte políčko. Po kliknutí Vyhledávání
, měli byste dodržovat následující výstup ve standardním výstupním proudu:
Vyhledávaný text = JavaFX, vyhledávání malých a velkých písmen = true
Otázka: Můžete mi poskytnout více informací o podpoře standardních a vlastních dialogů JavaFX?
A: V dialogových oknech JavaFX najdete další příklady standardních a vlastních dialogových oken (včetně vlastního dialogového okna pro přihlášení) a dozvíte se více o stylingu dialogových oken a nastavení vlastníka a modality dialogového okna.
Ovládání číselníku
Otázka: Co je to spinner?
A: A kužel je jednořádkový ovládací prvek textového pole, který umožňuje uživateli vybrat číslo nebo hodnotu objektu z seřazené sekvence takových hodnot. Přadleny obvykle poskytují pár drobných tlačítek se šipkami pro procházení prvky sekvence. Klávesnice šipka nahoru
/šipka dolů
klávesy také procházejí prvky. Uživateli může být také povoleno zadat (legální) hodnotu přímo do číselníku. Ačkoli pole se seznamem poskytují podobné funkce, jsou přadávače někdy upřednostňovány, protože nevyžadují rozevírací seznam, který může zakrýt důležitá data, a také proto, že umožňují funkce, jako je zabalení z maximální hodnoty zpět na minimální hodnotu (např od největšího kladného celého čísla do 0).
Otázka: Jak je spinner implementován?
A: Rozmetadlo je implementováno jako instance javafx.scene.control.Spinner
kontrolní třída. Tato třída se opírá o abstrakt javafx.scene.control.SpinnerValueFactory
class to provide the control's model (range of user-selectable values of a specific type). V současné době jsou jeho vnořené definovány pouze podporované modely DoubleSpinnerValueFactory
, IntegerSpinnerValueFactory
, a ListSpinnerValueFactory
třídy.
Otázka: Jak vytvořím číselník?
A: Roztoč vytvoříte voláním jednoho z Spinner
konstruktéři. Například, Spinner (int min, int max, int initialValue)
vytvoří číselník pro výběr jedné z celočíselných hodnot min
přes max
. Původně vybraná hodnota je označena počáteční hodnota
. Pokud tato hodnota není v min
/max
rozsah, min
Hodnota se stane původně vybranou hodnotou.
Spinner (int min, int max, int initialValue)
je konstruktor pohodlí, který nainstaluje instanci IntegerSpinnerValueFactory
třída s těmito hodnotami jako model. Pokud dáváte přednost přímé spolupráci s IntegerSpinnerValueFactory
, můžete vytvořit instanci této třídy a předat její odkaz na Spinner (SpinnerValueFactory valueFactory)
konstruktor. Alternativně můžete vytvořit prázdný číselník pomocí Spinner ()
konstruktor a vyvolat Spinner
je void setValueFactory (hodnota SpinnerValueFactory)
metoda instalace tohoto továrního objektu.
Otázka: Můžete uvést jednoduchý příklad celočíselných a dvojitých přesných čísel s plovoucí desetinnou čárkou?
A: Podívejte se na výpis 6.
Výpis 6. SpinnerDemo.java
(verze 1)
import javafx.application.Application; import javafx.geometry.Insets; importovat javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; importovat javafx.stage.Stage; public class SpinnerDemo rozšiřuje Application {@Override public void start (Stage primaryStage) {Spinner ispinner = new Spinner (1, 10, 2); Spinner dspinner = nový Spinner (1,5; 3,5; 1,5; 0,5); GridPane grid = new GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nové vložky (10)); grid.add (nový štítek ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (nový štítek („Double Spinner“), 0, 1); grid.add (dspinner, 1, 1); Scéna scéna = nová scéna (mřížka, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scéna); primaryStage.show (); }}
Výpis 6 Start()
metoda nejprve vytvoří celočíselný číselník prostřednictvím výše uvedeného konstruktoru. Poté vytvoří dvojitý přesný číselník s plovoucí desetinnou čárkou pomocí Spinner (double min, double max, double initialValue, double amountToStepBy)
konstruktor. Tento konstruktor přijímá jednotky, ve kterých se zvýší nebo sníží číselník pomocí hodnoty předané amountToStepBy
, což se stalo 0.5
.
Pokračování, Start()
vytvoří a nakonfiguruje kontejner podokna mřížky a naplní mřížku 2 řádky po 2 sloupcích těmito přadleny a přidruženými štítky. Poté vytvoří scénu na základě mřížky a nakonfiguruje / zobrazí scénu.
Sestavte výpis 6 následujícím způsobem:
javac SpinnerDemo.java
Výslednou aplikaci spusťte následovně:
java SpinnerDemo
Obrázek 19 ukazuje výsledné uživatelské rozhraní.
Obrázek 19: Kliknutím na šipky každého rozmetače zvýšíte / snížíte rozsah hodnot
Otázka: Chci, aby byly předchozí přadleny upravitelné. Jak mohu dosáhnout tohoto úkolu?
A: Volání Spinner
je void setEditable (logická hodnota)
metoda, absolvování skutečný
na hodnota
. Vytvořil jsem druhou verzi SpinnerDemo
předvést. Zdrojový kód najdete v archivu kódů tohoto článku.
Otázka: Když upravím předchozí přadleny, zadejte do textového pole nelegální znaky (například písmena) a stiskněte klávesu Enter
klíč, vyvolána výjimka. Výjimkou je java.lang.NumberFormatException
pro celočíselný číselník a java.lang.RuntimeException
(obal java.text.ParseException
) pro dvojitý přesný číselník s plovoucí desetinnou čárkou. Jak mohu zabránit vyvolání této výjimky?
A: Vyloučení této výjimky můžete zabránit instalací instance podtřídy abstraktu javafx.util.StringConverter
třída (kde T
je typ převáděný na nebo z Tětiva
) jako SpinnerValueFactory
konvertor. Tento objekt by zachytil vyvolanou výjimku a přijal opatření.
Spinner
používá a javafx.scene.control.TextField
objekt jako editor pro získání vstupu uživatele. Protože do textového pole lze uložit libovolný znak, lze zadat nevhodné znaky, jako jsou písmena, v číselném kontextu. Poté, co uživatel stiskne Enter
, vstup je předán do SpinnerValueFactory
převaděče T fromString (řetězec)
metoda. Pro továrny s celočíselnou nebo dvojitou přesností s plovoucí desetinnou čárkou T
je buď Celé číslo
nebo Dvojnásobek
. Převod z řetězce s neplatnými znaky na číslo má za následek vyvolání výjimky fromString ()
. Získejte odkaz na aktuální převodník a nainstalujte nový převodník, jehož fromString ()
metoda vyvolá ostatní převaděče fromString ()
metoda v a Snaž se
prohlášení s příslušným chytit
blok. Výpis 7 představuje aplikaci, která plní tento úkol.
Výpis 7. SpinnerDemo.java
(verze 3)
import javafx.application.Application; import javafx.geometry.Insets; importovat javafx.scene.Scene; importovat javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; importovat javafx.stage.Stage; import javafx.util.StringConverter; public class SpinnerDemo rozšiřuje aplikaci {@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) {try {return sci.fromString (value); } catch (NumberFormatException nfe) {System.out.println ("Bad integer:" + value); 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 = new StringConverter () {@Override public Double fromString (String value) {try {return scd.fromString (value); } catch (RuntimeException re) {System.out.println ("Bad double:" + hodnota); System.out.println ("Příčina:" + re.getCause ()); návratnost 0,0; }} @Override public String toString (Double value) {return scd.toString (value); }}; dspinner.getValueFactory (). setConverter (scd2); GridPane grid = new GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nové vložky (10)); grid.add (nový štítek ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (nový štítek („Double Spinner“), 0, 1); grid.add (dspinner, 1, 1); Scéna scéna = nová scéna (mřížka, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scéna); primaryStage.show (); }}
Zkompilovat výpis 7 (javac SpinnerDemo.java
) a spusťte výslednou aplikaci (java SpinnerDemo
). Při zadávání nepovolených znaků do textového pole číselníku byste měli sledovat chybové zprávy podobné těm, které jsou uvedeny níže:
Špatné celé číslo: a2 Špatné dvojité: b1,5 Příčina: java.text.ParseException: Neporovnatelné číslo: "b1,5"
Otázka: Potřebuji řetězový spinner. Jak je mohu získat?
A: Řetězcový spinner můžete získat prostřednictvím Spinner (položky pozorovatelného seznamu)
konstruktor. Například následující fragment kódu ukazuje, jak vytvořit číselník pro výběr názvu dne v týdnu:
Seznam weekDays = Arrays.asList ("pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota", "neděle"); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = nový Spinner (obsWeekDays);
Vyňal jsem tento fragment kódu ze čtvrté verze SpinnerDemo
aplikace (zdrojový kód najdete v archivu kódů tohoto článku). Když spustíte tuto aplikaci, uvidíte číselník zobrazený na obrázku 20.
Obrázek 20: Při pokusu o zadání textu do editoru, který přesně neodpovídá jednomu z názvů dnů v týdnu java.lang.UnsupportedOperationException
být hozen
Otázka: Můžete mi poskytnout více informací o podpoře JavaFX pro přadleny?
A: Podívejte se na dokumentaci JavaFX 8 na Spinner
a SpinnerValueFactory
Další informace o tomto ovládacím prvku a jeho modelu. Možná budete také chtít spustit vyhledávání Google, abyste zjistili, jak ostatní používají tento ovládací prvek.
Formátování textu
Otázka: Jak JavaFX podporuje formátování textu?
A: JavaFX podporuje formátování textu poskytováním javafx.scene.control.TextFormatter
třída s vnořenými Změna
třída. Dále abstrakt javafx.scene.control.TextInputControl
třída (nadřazená třída Textové pole
a javafx.scene.control.TextArea
) dostal a textový formát
vlastnost, takže libovolná podtřída automaticky podporuje formátování textu.
Otázka: Jaké druhy formátování textu jsou podporovány?
A:Textový formát
podporuje dva druhy formátování textu: hodnotu a změnu. A formátovač hodnot když stisknete Enter
po zadání textu. A změnit formátovač je volána pro každou změnu odstranění textu, přidání textu a nahrazení textu pro ovládací prvek pro zadávání textu. Tyto formátory lze použít samostatně nebo společně.
Otázka: Jak jsou specifikovány formátovače hodnot a změn?